Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Android Develpment

Introduction to Android Develpment

Me and my friend Eugeniu Arbuleac had the pleasure to present an Introduction to Android development course at Google Developers Group Bucharest first 2013 meetup.

Andrei Catinean

March 03, 2013
Tweet

More Decks by Andrei Catinean

Other Decks in Programming

Transcript

  1. Developer says what happens at each state $ ¢ Activity

    Lifecycle Managed by ActivityManager
  2. D/MyActivity( 1146): onCreate D/MyActivity( 1146): onStart D/MyActivity( 1146): onResume First

    time run D/MyActivity( 1146): onClickAnotherActivity D/MyActivity( 1146): onPause D/MyActivity( 1146): onStop D/MyActivity( 1146): onRestart D/MyActivity( 1146): onStart D/MyActivity( 1146): onResume Open another activity, then Back button Activity Lifecycle
  3. D/MyActivity( 1146): onPause D/MyActivity( 1146): onStop D/MyActivity( 1146): onDestroy D/MyActivity(

    1146): onCreate D/MyActivity( 1146): onStart D/MyActivity( 1146): onResume Rotate screen Activity Lifecycle
  4. D/MyActivity( 1146): onPause D/MyActivity( 1146): onStop Home Button D/MyActivity( 1146):

    onPause D/MyActivity( 1146): onStop D/MyActivity( 1146): onDestroy D/MyActivity( 1146): onCreate D/MyActivity( 1146): onStart D/MyActivity( 1146): onResume Rotate screen Activity Lifecycle
  5. 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"); } Activity Lifecycle
  6. @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"); } }
  7. Declaring the Activity <manifest ... > <application ... > <activity

    android:name=".MyActivity" /> ... </application ... > ... </manifest > Let your application know about your Activity into the AndroidManifest.xml
  8. 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
  9. Building Android UI Programmatically Initialize new widgets Customize properties for

    each VS. XML Declare UI in XML Inflate XML in Java files
  10. 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
  11. <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
  12. 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
  13. 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
  14. <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
  15. 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
  16. 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
  17. @Override protected 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); } @Override protected void onPause() { super.onPause(); unregisterReceiver(receiver); } Registering the Broadcast Receiver Registering Programmatically