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

首頁 > 系統 > Android > 正文

Android 中 ActivityLifecycleCallbacks的實例詳解

2019-10-22 18:28:31
字體:
來源:轉載
供稿:網友

Android 中 ActivityLifecycleCallbacks的實例詳解

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

MyApplication如下:

package com.cc;  import java.util.LinkedList;  import android.app.Activity; import android.app.Application; import android.os.Bundle; /**  * Demo示例:  * ActivityLifecycleCallbacks使用示例  *  * ActivityLifecycleCallbacks用于對應用中Activity的生命周期的追蹤和回調  *  * 使用ActivityLifecycleCallbacks可實現:  * 1 判斷App是否在后臺運行  * 2 關閉該應用所有Activity  *  *  * (1)判斷App是否在后臺運行  * 在該實現中采用activityCounter記錄Activity的個數.  * 通過對于activityCounter是否為0判斷當前APP是否在前臺運行.  *  * 從ActivityLifecycleCallbacks的實現方法中我們的慣性思維是:  * 在ActivityLifecycleCallbacks的onActivityResumed()中activityCounter+1.  * 在onActivityPaused()中activityCounter-1,  * 但是這么對么?  *  * 先看一下界面跳轉時兩個Activity的生命周期  * 當從Activity A跳轉到Activity B時,兩個Activity的生命周期如下:  * A.onPause()->B.onCreate()->B.onStart()-> B.onResume()-> A.onStop()  *  * 假若按照上述方式那么:  * 在A啟動后activityCounter=1;  * 當從A跳轉到B時在調用A.onPause()時執行:activityCounter-1=0;  * 即該APP運行在后臺.  * 這當然是錯的,兩個界面切換的過程中APP當然是運行在前臺的。  *  * 如下修改:  * 在onActivityStarted()中對于activityCounter+1  * 在onActivityStopped()中對于activityCounter-1  * 小結:注意Activity跳轉時的生命周期  *  * (2)關閉該應用所有Activity  *  2.1 利用LinkedList<Activity>管理應用中的界面  *  2.2 在ActivityLifecycleCallbacks的onActivityCreated()  *    將Activity添加到LinkedList中  *    在ActivityLifecycleCallbacks的onActivityDestroyed()  *    將Activity從LinkedList中移除  *  2.3 關閉應用時銷毀LinkedList中所有Activity  *  * 備注說明:  * 1 ActivityLifecycleCallbacks是在API 14及其以上才有的  * 2 在Android4.0以下可以在BaseActivity中按照該思路實現  *  */ 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是否在后臺運行   public boolean isAppRunningBackground(){     boolean flag=false;     if(activityCounter==0){       flag=true;     }     return flag;   }      //退出應用   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> 

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中牟县| 阳东县| 同仁县| 伊宁市| 富蕴县| 河南省| 宁乡县| 镇江市| 邛崃市| 舒城县| 崇左市| 凯里市| 晋州市| 油尖旺区| 大城县| 衡水市| 敦煌市| 昌吉市| 马山县| 格尔木市| 普陀区| 昭苏县| 葵青区| 济源市| 于田县| 杭锦后旗| 永宁县| 斗六市| 会东县| 沙田区| 政和县| 鱼台县| 镇宁| 新竹市| 叙永县| 汾西县| 双柏县| 革吉县| 文安县| 奈曼旗| 长沙市|