Showing posts with label Android. Show all posts
Showing posts with label Android. Show all posts

Tuesday, 22 October 2013

Android Activity

In Android, Activity is like state  of the application. Each activity has a layout. Activity has a lifecycle.
1. onCreate()
2. onStart()
3. onRestart()
4. onResume()
5. onPause()
6. onStop()
7. onDestroy()
ActivityA.java
package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.activitylifecycle.util.StatusTracker;
import com.example.activitylifecycle.util.Utils;



public class ActivityA extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_a);
       mActivityName = getString(R.string.activity_a);
       mStatusView = (TextView)findViewById(R.id.status_view_a);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_a);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
       mStatusTracker.clear();
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityA.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityB(View v) {
       Intent intent = new Intent(ActivityA.this, ActivityB.class);
       startActivity(intent);
   }

   public void startActivityC(View v) {
       Intent intent = new Intent(ActivityA.this, ActivityC.class);
       startActivity(intent);
   }
 
   public void finishActivityA(View v) {
       ActivityA.this.finish();
   }

}

ActivityB.java



package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.activitylifecycle.util.StatusTracker;
import com.example.activitylifecycle.util.Utils;




public class ActivityB extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_b);
       mActivityName = getString(R.string.activity_b_label);
       mStatusView = (TextView)findViewById(R.id.status_view_b);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_b);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityB.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityA(View v) {
       Intent intent = new Intent(ActivityB.this, ActivityA.class);
       startActivity(intent);
   }

   public void startActivityC(View v) {
       Intent intent = new Intent(ActivityB.this, ActivityC.class);
       startActivity(intent);
   }

   public void finishActivityB(View v) {
       ActivityB.this.finish();
   }
}

ActivityC.java



package com.example.android.lifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import com.example.android.lifecycle.util.StatusTracker;
import com.example.android.lifecycle.util.Utils;

public class ActivityC extends Activity {

   private String mActivityName;
   private TextView mStatusView;
   private TextView mStatusAllView;
   private StatusTracker mStatusTracker = StatusTracker.getInstance();

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_c);
       mActivityName = getString(R.string.activity_c_label);
       mStatusView = (TextView)findViewById(R.id.status_view_c);
       mStatusAllView = (TextView)findViewById(R.id.status_view_all_c);
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStart() {
       super.onStart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_start));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onRestart() {
       super.onRestart();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_restart));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onResume() {
       super.onResume();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onPause() {
       super.onPause();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_pause));
       Utils.printStatus(mStatusView, mStatusAllView);
   }

   @Override
   protected void onStop() {
       super.onStop();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_stop));
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       mStatusTracker.setStatus(mActivityName, getString(R.string.on_destroy));
   }

   public void startDialog(View v) {
       Intent intent = new Intent(ActivityC.this, DialogActivity.class);
       startActivity(intent);
   }

   public void startActivityA(View v) {
       Intent intent = new Intent(ActivityC.this, ActivityA.class);
       startActivity(intent);
   }

   public void startActivityB(View v) {
       Intent intent = new Intent(ActivityC.this, ActivityB.class);
       startActivity(intent);
   }

   public void finishActivityC(View v) {
       ActivityC.this.finish();
   }
}




DialogActivity.java
package com.example.activitylifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;

public class DialogActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.activity_dialog);
   }

       public void finishDialog(View v) {
       DialogActivity.this.finish();
   }
}



StatusTracker.java

package com.example.activitylifecycle.util;

import java.util.*;

public class StatusTracker {
 private Map<String, String> mStatusMap;
 private List<String> mMethodList;
 private static StatusTracker ourInstance = new StatusTracker();
 private static final String STATUS_SUFFIX = "ed";

 public static StatusTracker getInstance() {
   return ourInstance;
 }

 private StatusTracker() {
   mStatusMap = new LinkedHashMap<String, String>();
   mMethodList = new ArrayList<String>();
 }

 public List<String> getMethodList() {
   return mMethodList;
 }

 public void clear() {
   mMethodList.clear();
   mStatusMap.clear();
 }

   public void setStatus(String activityName, String status) {
   mMethodList.add(activityName + "." + status + "()");
   if (mStatusMap.containsKey(activityName)) mStatusMap.remove(activityName);
   mStatusMap.put(activityName, status);
 }

  public String getStatus(String activityName) {
   String status = mStatusMap.get(activityName);
   status = status.substring(2, status.length());

   // String manipulation to ensure the status value is spelled correctly.
   if (status.endsWith("e")) {
     status = status.substring(0, status.length() - 1);
   }
   if (status.endsWith("p")) {
     status = status + "p";
   }
   status = status + STATUS_SUFFIX;
   return status;
 }

 public Set<String> keySet() {
   return mStatusMap.keySet();
 }
}

Utils.java

package com.example.activitylifecycle.util;

import android.os.Handler;
import android.widget.TextView;

import java.util.List;

public class Utils {

 private static StatusTracker mStatusTracker = StatusTracker.getInstance();

  public static void printStatus(final TextView viewMethods, final TextView viewStatus) {
     Handler handler = new Handler();
     handler.postDelayed(new Runnable() {
       public void run() {
         StringBuilder sbMethods = new StringBuilder();
         List<String> listMethods = mStatusTracker.getMethodList();
         for (String method : listMethods) {
             sbMethods.insert(0, method + "\r\n");
         }
         if(viewMethods != null) {
             viewMethods.setText(sbMethods.toString());
         }

                   StringBuilder sbStatus = new StringBuilder();
         for (String key : mStatusTracker.keySet()) {
           sbStatus.insert(0,key + ": " + mStatusTracker.getStatus(key) + "\n");
         }
         if(viewStatus != null) {
             viewStatus.setText(sbStatus.toString());
         }
       }
     }, 750);
   }
}







Layout ActivityA
Other layout ActivityB and ActivityC also similar to ActivityA.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@color/dark_blue"
   android:padding="8dip"
   >

   <TextView android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/activity_a"
       android:gravity="center_horizontal"
       android:textSize="@dimen/font_large"
       android:textColor="@color/light_blue"
       android:paddingBottom="16dip"
       />

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       >
       <Button
           android:id="@+id/btn_start_b"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_b_label"
           android:onClick="startActivityB"
           />

       <Button
           android:id="@+id/btn_start_c"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_c_label"
           android:layout_toRightOf="@id/btn_start_b"
           android:onClick="startActivityC"
           />

       <Button
           android:id="@+id/btn_finish_a"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_finish_a_label"
           android:layout_toRightOf="@id/btn_start_c"
           android:onClick="finishActivityA"
           />

       <Button
           android:id="@+id/btn_start_dialog"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:text="@string/btn_start_dialog_label"
           android:layout_toRightOf="@id/btn_finish_a"
           android:onClick="startDialog"
           />

   </RelativeLayout>

   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="@dimen/font_medium"
       android:text="@string/lifecycle_method_list"
       android:textColor="@color/light_blue"
       />

   <ScrollView
        android:layout_width="match_parent"
        android:layout_height="160dp">
       <TextView
           android:id="@+id/status_view_a"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="@color/white"
           android:textColor="@color/black"
           android:padding="4dip"
           android:typeface="monospace"
           />
   </ScrollView>

   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:textSize="@dimen/font_medium"
       android:text="@string/activity_status"
       android:textColor="@color/light_blue"
       />

   <TextView
       android:id="@+id/status_view_all_a"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@color/white"
       android:textColor="@color/black"
       android:padding="4dip"
       android:typeface="monospace"
       />
</LinearLayout>

AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.activitylifecycle"
   android:versionCode="1"
   android:versionName="1.0" >

   <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="17" />

   <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".ActivityA"
           android:label="@string/app_name" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
        <activity android:name=".ActivityB" />

       <activity android:name=".ActivityC" />

       <activity android:name=".DialogActivity"
                 android:theme="@android:style/Theme.Dialog">
       </activity>
       
   </application>

</manifest>