国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android 中 ActivityLifecycleCallbacks的實(shí)例詳解

2019-12-12 02:05:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Android 中 ActivityLifecycleCallbacks的實(shí)例詳解

          以上就是使用ActivityLifecycleCallbacks的實(shí)例,代碼注釋寫(xiě)的很清楚大家可以參考下,

MyApplication如下:

package com.cc;  import java.util.LinkedList;  import android.app.Activity; import android.app.Application; import android.os.Bundle; /**  * Demo示例:  * ActivityLifecycleCallbacks使用示例  *  * ActivityLifecycleCallbacks用于對(duì)應(yīng)用中Activity的生命周期的追蹤和回調(diào)  *  * 使用ActivityLifecycleCallbacks可實(shí)現(xiàn):  * 1 判斷App是否在后臺(tái)運(yùn)行  * 2 關(guān)閉該應(yīng)用所有Activity  *  *  * (1)判斷App是否在后臺(tái)運(yùn)行  * 在該實(shí)現(xiàn)中采用activityCounter記錄Activity的個(gè)數(shù).  * 通過(guò)對(duì)于activityCounter是否為0判斷當(dāng)前APP是否在前臺(tái)運(yùn)行.  *  * 從ActivityLifecycleCallbacks的實(shí)現(xiàn)方法中我們的慣性思維是:  * 在ActivityLifecycleCallbacks的onActivityResumed()中activityCounter+1.  * 在onActivityPaused()中activityCounter-1,  * 但是這么對(duì)么?  *  * 先看一下界面跳轉(zhuǎn)時(shí)兩個(gè)Activity的生命周期  * 當(dāng)從Activity A跳轉(zhuǎn)到Activity B時(shí),兩個(gè)Activity的生命周期如下:  * A.onPause()->B.onCreate()->B.onStart()-> B.onResume()-> A.onStop()  *  * 假若按照上述方式那么:  * 在A啟動(dòng)后activityCounter=1;  * 當(dāng)從A跳轉(zhuǎn)到B時(shí)在調(diào)用A.onPause()時(shí)執(zhí)行:activityCounter-1=0;  * 即該APP運(yùn)行在后臺(tái).  * 這當(dāng)然是錯(cuò)的,兩個(gè)界面切換的過(guò)程中APP當(dāng)然是運(yùn)行在前臺(tái)的。  *  * 如下修改:  * 在onActivityStarted()中對(duì)于activityCounter+1  * 在onActivityStopped()中對(duì)于activityCounter-1  * 小結(jié):注意Activity跳轉(zhuǎn)時(shí)的生命周期  *  * (2)關(guān)閉該應(yīng)用所有Activity  *  2.1 利用LinkedList<Activity>管理應(yīng)用中的界面  *  2.2 在ActivityLifecycleCallbacks的onActivityCreated()  *    將Activity添加到LinkedList中  *    在ActivityLifecycleCallbacks的onActivityDestroyed()  *    將Activity從LinkedList中移除  *  2.3 關(guān)閉應(yīng)用時(shí)銷(xiāo)毀LinkedList中所有Activity  *  * 備注說(shuō)明:  * 1 ActivityLifecycleCallbacks是在API 14及其以上才有的  * 2 在Android4.0以下可以在BaseActivity中按照該思路實(shí)現(xiàn)  *  */ public class MyApplication extends Application {   private static int activityCounter=0;   private static MyApplication mApplicationInstance;   private static LinkedList<Activity> mActivityLinkedList;   private ActivityLifecycleCallbacksImpl mActivityLifecycleCallbacksImpl;   @Override   public void onCreate() {     super.onCreate();     mApplicationInstance=new MyApplication();     mActivityLinkedList=new LinkedList<Activity>();     mActivityLifecycleCallbacksImpl=new ActivityLifecycleCallbacksImpl();     this.registerActivityLifecycleCallbacks(mActivityLifecycleCallbacksImpl);   }      public static MyApplication getInstance() {     if (null==mApplicationInstance) {       mApplicationInstance=new MyApplication();     }     return mApplicationInstance;   }      //判斷App是否在后臺(tái)運(yùn)行   public boolean isAppRunningBackground(){     boolean flag=false;     if(activityCounter==0){       flag=true;     }     return flag;   }      //退出應(yīng)用   public void finishAllActivity(){     //unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacksImpl);     System.out.println("--> mActivityLinkedList.size()="+mActivityLinkedList.size());     if(null!=mActivityLinkedList){       for(Activity activity:mActivityLinkedList){         if(null!=activity){           activity.finish();         }       }     }   }         private class ActivityLifecycleCallbacksImpl implements ActivityLifecycleCallbacks{     @Override     public void onActivityCreated(Activity activity, Bundle savedInstanceState) {       System.out.println("onActivityCreated --> "+activity.getClass().getName());       if (null!=mActivityLinkedList&&null!=activity) {         mActivityLinkedList.addFirst(activity);       }     }      @Override     public void onActivityStarted(Activity activity) {       activityCounter++;       System.out.println("onActivityStarted --> "+activity.getClass().getName()+",activityCounter="+activityCounter);     }      @Override     public void onActivityResumed(Activity activity) {       System.out.println("onActivityResumed --> "+activity.getClass().getName());     }      @Override     public void onActivityPaused(Activity activity) {       System.out.println("onActivityPaused --> "+activity.getClass().getName());     }      @Override     public void onActivityStopped(Activity activity) {       activityCounter--;       System.out.println("onActivityStopped --> "+activity.getClass().getName()+",activityCounter="+activityCounter);     }      @Override     public void onActivitySaveInstanceState(Activity activity, Bundle outState) {       System.out.println("onActivitySaveInstanceState --> "+activity.getClass().getName());     }      @Override     public void onActivityDestroyed(Activity activity) {       System.out.println("onActivityDestroyed --> "+activity.getClass().getName());       if (null!=mActivityLinkedList&&null!=activity) {         if (mActivityLinkedList.contains(activity)) {           mActivityLinkedList.remove(activity);         }       }     }        }  } 

FirstActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FirstActivity extends Activity {    private Context mContext;    private Button mOpenNewActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.first_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mOpenNewActivityButton=(Button) findViewById(R.id.openNewActivityButton);     mOpenNewActivityButton.setOnClickListener(mClickListenerImpl);     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.openNewActivityButton:         Intent intent=new Intent(mContext, SecondActivity.class);         startActivity(intent);         break;       case R.id.finishThisActivityButton:         finish();         break;        default:         break;       }      }    }      @Override   protected void onResume() {     super.onResume();     //System.out.println(" first Activity onResume --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onStop() {     super.onStop();     //System.out.println(" first Activity onStop --> "+MyApplication.getInstance().isAppRunningBackground());   }       } 

SecondActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;  public class SecondActivity extends Activity {    private Context mContext;    private Button mOpenNewActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.second_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mOpenNewActivityButton=(Button) findViewById(R.id.openNewActivityButton);     mOpenNewActivityButton.setOnClickListener(mClickListenerImpl);     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.openNewActivityButton:         Intent intent=new Intent(mContext, ThirdActivity.class);         startActivity(intent);         break;        case R.id.finishThisActivityButton:         finish();         break;        default:         break;       }      }    }     } 

ThirdActivity如下:

package com.cc;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;  public class ThirdActivity extends Activity {    private Context mContext;    private Button mFinishAllActivityButton;    private Button mFinishThisActivityButton;    private ClickListenerImpl mClickListenerImpl;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.third_activity);     init();   }      private void init(){     mContext=this;     mClickListenerImpl=new ClickListenerImpl();     mFinishThisActivityButton=(Button) findViewById(R.id.finishThisActivityButton);     mFinishThisActivityButton.setOnClickListener(mClickListenerImpl);     mFinishAllActivityButton=(Button) findViewById(R.id.finishAllActivityButton);     mFinishAllActivityButton.setOnClickListener(mClickListenerImpl);   }         private class ClickListenerImpl implements OnClickListener {     @Override     public void onClick(View v) {       switch (v.getId()) {       case R.id.finishThisActivityButton:         finish();         break;       case R.id.finishAllActivityButton:         MyApplication.getInstance().finishAllActivity();         break;       default:         break;       }      }   }      @Override   protected void onResume() {     super.onResume();     //System.out.println(" third Activity onResume --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onStop() {     super.onStop();     //System.out.println(" third Activity onStop --> "+MyApplication.getInstance().isAppRunningBackground());   }      @Override   protected void onDestroy() {     super.onDestroy();     //System.out.println(" third Activity onDestroy --> "+MyApplication.getInstance().isAppRunningBackground());   }     } 

first_activity.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:paddingBottom="@dimen/activity_vertical_margin"   android:paddingLeft="@dimen/activity_horizontal_margin"   android:paddingRight="@dimen/activity_horizontal_margin"   android:paddingTop="@dimen/activity_vertical_margin"   tools:context="com.cc.FirstActivity" >    <Button     android:id="@+id/openNewActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerInParent="true"     android:text="open new Activity" />    <TextView     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_above="@id/openNewActivityButton"     android:layout_centerInParent="true"     android:layout_marginBottom="50dip"     android:textSize="20sp"     android:textColor="@android:color/holo_red_light"     android:text="This is the first Activity" />    <Button     android:id="@+id/finishThisActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/openNewActivityButton"     android:layout_centerHorizontal="true"     android:layout_marginTop="50dip"     android:text="finish this activity" />  </RelativeLayout> 

second_activity.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:paddingBottom="@dimen/activity_vertical_margin"   android:paddingLeft="@dimen/activity_horizontal_margin"   android:paddingRight="@dimen/activity_horizontal_margin"   android:paddingTop="@dimen/activity_vertical_margin"   tools:context="com.cc.FirstActivity" >    <Button     android:id="@+id/openNewActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerInParent="true"     android:text="open new Activity" />    <TextView     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_above="@id/openNewActivityButton"     android:layout_centerInParent="true"     android:layout_marginBottom="50dip"     android:textSize="20sp"     android:textColor="@android:color/holo_red_light"     android:text="This is the second Activity" />    <Button     android:id="@+id/finishThisActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/openNewActivityButton"     android:layout_centerHorizontal="true"     android:layout_marginTop="50dip"     android:text="finish this activity" />  </RelativeLayout> 

third_activity.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:paddingBottom="@dimen/activity_vertical_margin"   android:paddingLeft="@dimen/activity_horizontal_margin"   android:paddingRight="@dimen/activity_horizontal_margin"   android:paddingTop="@dimen/activity_vertical_margin"   tools:context="com.cc.FirstActivity" >    <TextView     android:id="@+id/textView"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_above="@id/openNewActivityButton"     android:layout_centerHorizontal="true"     android:layout_marginTop="100dp"     android:text="This is the third Activity"     android:textColor="@android:color/holo_red_light"     android:textSize="20sp" />    <Button     android:id="@+id/finishThisActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/textView"     android:layout_centerHorizontal="true"     android:layout_marginTop="50dip"     android:text="finish this activity" />    <Button     android:id="@+id/finishAllActivityButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/finishThisActivityButton"     android:layout_centerHorizontal="true"     android:layout_marginTop="50dip"     android:text="finish All Activity" />  </RelativeLayout> 

AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="com.cc"   android:versionCode="1"   android:versionName="1.0" >    <uses-sdk     android:minSdkVersion="14"     android:targetSdkVersion="14" />    <application     android:name="com.cc.MyApplication"     android:allowBackup="true"     android:icon="@drawable/ic_launcher"     android:label="@string/app_name"     android:theme="@style/AppTheme" >     <activity       android:name=".FirstActivity"       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="com.cc.SecondActivity"/>     <activity android:name="com.cc.ThirdActivity"/>   </application>  </manifest> 

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 华容县| 长宁区| 巧家县| 门源| 上犹县| 百色市| 寻乌县| 谷城县| 广东省| 牙克石市| 台北市| 年辖:市辖区| 凌源市| 嘉荫县| 淅川县| 南溪县| 宣汉县| 武功县| 永丰县| 乌苏市| 卢氏县| 龙南县| 东乌珠穆沁旗| 新巴尔虎右旗| 马尔康县| 固镇县| 江油市| 塔城市| 黄大仙区| 进贤县| 峨边| 荥经县| 子洲县| 天台县| 玉山县| 揭阳市| 二连浩特市| 沧州市| 邹平县| 建湖县| 逊克县|