全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 中 ActivityLifecycleCallbacks的实例详解

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  #   # ActivityLifecycleCallbacks  # ActivityLifecycleCallbacks的使用方法  # Android框架组件Lifecycle的使用详解  # 浅谈Android的Lifecycle源码分析  # Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解  # Android Jetpack架构组件Lifecycle详解  # 跳转  # 跳转到  # 是在  # 如有  # 希望能  # 很清楚  # 谢谢大家  # 回调  # 先看  # 移除  # 过程中  # 疑问请  # getInstance  # null  # registerActivityLifecycleCallbacks  # super  # return  # false  # true  # flag 


相关文章: 网站微信制作软件,如何制作微信链接?  IOS倒计时设置UIButton标题title的抖动问题  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何快速登录WAP自助建站平台?  建站三合一如何选?哪家性价比更高?  seo网站制作优化,网站SEO优化步骤有哪些?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何选择最佳自助建站系统?快速指南解析优劣  如何通过VPS搭建网站快速盈利?  宝塔建站助手安装配置与建站模板使用全流程解析  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  青岛网站建设如何选择本地服务器?  网站专业制作公司有哪些,做一个公司网站要多少钱?  大连网站制作公司哪家好一点,大连买房网站哪个好?  ,sp开头的版面叫什么?  建站之星如何实现五合一智能建站与营销推广?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  学校为何禁止电信移动建设网站?  如何在云指建站中生成FTP站点?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  购物网站制作公司有哪些,哪个购物网站比较好?  如何快速生成专业多端适配建站电话?  网站制作网站,深圳做网站哪家比较好?  建站之星如何快速更换网站模板?  如何实现建站之星域名转发设置?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  用v-html解决Vue.js渲染中html标签不被解析的问题  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何快速生成高效建站系统源代码?  如何挑选最适合建站的高性能VPS主机?  七夕网站制作视频,七夕大促活动怎么报名?  如何在企业微信快速生成手机电脑官网?  如何确保西部建站助手FTP传输的安全性?  股票网站制作软件,网上股票怎么开户?  ,怎么用自己头像做动态表情包?  网页设计网站制作软件,microsoft office哪个可以创建网页?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何在Windows服务器上快速搭建网站?  如何通过商城免费建站系统源码自定义网站主题?  如何在阿里云高效完成企业建站全流程?  黑客如何利用漏洞与弱口令入侵网站服务器?  建站VPS能否同时实现高效与安全翻墙?  python的本地网站制作,如何创建本地站点?  建站之星安装步骤有哪些常见问题?  孙琪峥织梦建站教程如何优化数据库安全?  微信小程序 input输入框控件详解及实例(多种示例)  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何在云主机上快速搭建多站点网站?  微信推文制作网站有哪些,怎么做微信推文,急? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。