Introduction to android

Post on 15-Jan-2015

60 views 0 download

description

GDG Bucharest first meetup 2013

Transcript of Introduction to android

Introduction to Android Development

(Part 1)

Eugeniu Arbuleac@arbuleacarbuleac.ev@gmail.com

Andrei Catinean@electryc

andrei.catinean@gmail.com

WHO WE ARE

Activities and UI

Activities and UI

Intents

Activities and UI

Intents

Services

Activities and UI

Intents

Services

Broadcast Receivers

Activities and UIActivities and UI

Activities and UI

A screen

Application = Σ activity

Activity Lifecycle

Managed by ActivityManager

Activity Lifecycle

Developer says what happens at each state

$

¢

Activity Lifecycle

Managed by ActivityManager

D/MyActivity( 1146): onCreateD/MyActivity( 1146): onStartD/MyActivity( 1146): onResume

First time run

D/MyActivity( 1146): onClickAnotherActivityD/MyActivity( 1146): onPauseD/MyActivity( 1146): onStopD/MyActivity( 1146): onRestartD/MyActivity( 1146): onStartD/MyActivity( 1146): onResume

Open another activity, then Back button

Activity Lifecycle

D/MyActivity( 1146): onPauseD/MyActivity( 1146): onStopD/MyActivity( 1146): onDestroyD/MyActivity( 1146): onCreateD/MyActivity( 1146): onStartD/MyActivity( 1146): onResume

Rotate screen

Activity Lifecycle

D/MyActivity( 1146): onPauseD/MyActivity( 1146): onStop

Home Button

D/MyActivity( 1146): onPauseD/MyActivity( 1146): onStopD/MyActivity( 1146): onDestroyD/MyActivity( 1146): onCreateD/MyActivity( 1146): onStartD/MyActivity( 1146): onResume

Rotate screen

Activity Lifecycle

package ro.gdgcluj.demoapp;

import android.app.Activity;import android.os.Bundle;import android.util.Log;

public class MyActivity extends Activity {

static final String TAG = MyActivity.class.getSimpleName();

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Log.d(TAG, "onCreate"); }

@Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart"); }

@Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); }

@Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause"); }

@Override protected void onRestart() { super.onRestart(); Log.d(TAG, "onRestart"); }

@Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop"); }

@Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); }

}

Activity Lifecycle

package ro.gdgcluj.demoapp;

import android.app.Activity;import android.os.Bundle;import android.util.Log;

public class MyActivity extends Activity {

static final String TAG = MyActivity.class.getSimpleName();

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Log.d(TAG, "onCreate"); }

@Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart"); }

@Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); }

@Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause"); }

@Override protected void onRestart() { super.onRestart(); Log.d(TAG, "onRestart"); }

@Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop"); }

@Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); }

}

Declaring the Activity

<manifest ... >  <application ... >      <activity android:name=".MyActivity" />      ...  </application ... >  ...</manifest >

Let your application know about your Activity into the AndroidManifest.xml

For your main activity use Intent Filters

<manifest ... >  <application ... >      <activity android:name=".MyActivity" > <intent-filter> <action android:name= "android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> <intent-filter />      <activity />  </application ... >  ...</manifest >

<manifest ... >  <application ... >      <activity android:name=".MyActivity" />      ...  </application ... >  ...</manifest >

Let your application know about your Activity into the AndroidManifest.xml

Declaring the Activity

Building Android UI

XML

Declare UI in XML

Inflate XML in Java files

Building Android UI

Programmatically

Initialize new widgets

Customize properties for each

VS.

XML

Declare UI in XML

Inflate XML in Java files

Use them both

Programmatically

Initialize new widgets

Customize properties for each

VS.

XML

Declare UI in XML

Inflate XML in Java files

Building Android UI

Layouts and views hierarchy

IntentsIntents

Used to start activities, start/stop services, or send broadcasts

Intents

startActivity(Intent activity);

startService(Intent service);

stopService(Intent service);

sendBroadcast(Intent intent);

Using Intents

startActivity(new Intent(this, TargetActivity.class));

startService(new Intent(this, TargetService.class));

Explicit Intents

startService(new Intent("example.intent.action.IntentService"));

sendBroadcast(new Intent("example.intent.action.Receiver"));

Implicit Intents

startActivity(new Intent(this, TargetActivity.class));

startService(new Intent(this, TargetService.class));

Explicit Intents

<service android:name=".IntentService"> <intent-filter> <action android:name="example.intent.action.IntentService" /> </intent-filter></service>

<receiver android:name=".Receiver"> <intent-filter> <action android:name="example.intent.action.Receiver" /> </intent-filter></receiver>

startService(new Intent("example.intent.action.IntentService"));

sendBroadcast(new Intent("example.intent.action.Receiver"));

Implicit Intents

startActivity(new Intent(this, TargetActivity.class));

startService(new Intent(this, TargetService.class));

Explicit Intents

AndroidManifest.xml

Intent FiltersActivity

Service

Receiver

Action

<intent-filter> <action android:name="any.action.you.want" /></intent-filter>

Intent Filters

Action

Activity

Service

Receiver

AndroidManifeset.xml

ServicesServices

Run in background

Don’t have UI

Run on the UI thread

Services

UI ActivityUI Activity

ServiceService

startService(); stopService();

Services

Run in background

Don’t have UI

Run on the UI thread

Service starts and "runs" until it gets a request to stop

To offload work from main thread, use intent service.

Intent service uses worker thread, stops when done with work.

Service Lifecycle

package ro.gdgcluj.demoapp;

import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;

public class MyService extends Service { static final String TAG = MyService.class.getSimpleName();

@Override public IBinder onBind(Intent arg0) { return null; }

@Override public void onCreate() { Log.d(TAG, "onCreate"); }

@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand"); return START_STICKY; }

@Override public void onDestroy() { Log.d(TAG, "onDestroy"); }

}

Service Example

<service android:name=".ServiceDemo"></service>

Called via its class name

<service android:name=".IntentService"> <intent-filter> <action android:name="example.intent.action.IntentService" /> </intent-filter></service>

Declaring the Service

Called via action

Broadcast ReceiversBroadcast Receivers

Intent based publish-subscribe mechanism

Listening system events: incoming calls, SMS messages a.o.

Broadcast Receivers

Register for certain intents

Get notified when intent happens

Intent based publish-subscribe mechanism

Listening system events: incoming calls, SMS messages a.o.

Broadcast Receivers

package ro.gdgcluj.demoapp;

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;

public class Receiver extends BroadcastReceiver { static final String TAG = Receiver.class.getSimpleName();

@Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "onReceive action: "+intent.getAction() ); }

}

Broadcast Receiver Example

<receiver android:name=".ReceiverDemo"> <intent-filter> <action android:name="example.intent.action.Receiver" /> </intent-filter></receiver>

Declaring it in AndroidManifest.xml

Registering the Broadcast Receiver

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Create the receiver receiver = new Receiver(); filter = new IntentFilter( ANY_INTENT_ACTION );}

protected void onResume() { super.onResume(); super.registerReceiver(receiver, filter);}

@Overrideprotected void onPause() { super.onPause(); unregisterReceiver(receiver);}

Registering the Broadcast Receiver

Registering Programmatically

Questions

That’s all!

Eugeniu Arbuleac@arbuleacarbuleac.ev@gmail.com

Andrei Catinean@electryc

andrei.catinean@gmail.com

THANK YOU