• Android Studio 单刷《第一行代码》系列 04 —— Activity 相关


    前情提要(Previously)

    本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 作为开发 IDE 的同学开路。
    PS:其实我就是现学现卖,希望我能坚持刷完。

    系列目录在此:

    摘要(Abstract)

    Activity 的生命周期、启动模式、一键退出 App。

    Activity 的生命周期

    Activity 类中定义了七个回调方法,覆盖了其生命周期的每一个环节。

    • onCreate(),创建时调用。
    • onStart(),由不可见变为可见时调用。
    • onResume(),准备好显示时调用。
    • onPause(),系统准备去启动或恢复另一个 Activity 时调用。
    • onStop(),完全不可见时调用。
    • onDestroy(),被销毁之前调用。
    • onRestart(),重新启动时调用。

    以上七个方法中除了 onRestart() 方法,其他都是两两相对的,从而又可以将活动分为三种生存期。

    • 完整生存期,onCreate() 和 onDestory() 之间。
    • 可见生存期,onStart() 和 onStop() 之间。
    • 前台生存期,onResume() 和 onPause() 之间。

    加深对 Activity 生命周期的理解,可以看看下面这篇文章。

    Activity 的启动模式

    Android 是使用返回栈来管理 Activity 的。Activity 有四种启动模式,可以在 AndroidManifest.xml 中通过给 activity 标签增加 launchMode 属性来选择启动模式。

    • standard,默认启动模式,系统不管此 Activity 是否已经在返回栈中存在,每次启动 Activity 都会创建该 Activity 的一个新的实例。
    • singleTop,在启动 Activity 时,如果发现返回栈的栈顶是该 Activity,则直接使用她,不会再创建新的实例;如果栈顶不是该 Activity,则会创建新的实例。
    • singleTask,在启动 Activity 时,如果找到返回栈中已经存在该 Activity,则直接使用,并将这个 Activity 之上的所有 Activity 全部出栈;如果没找到,则会创建新的实例。
    • singleInstance,会启用一个新的返回栈来管理这个活动,并保证不再有其他 Activity 的实例进入。

    加深对 Activity 启动模式的理解,可以看看下面这篇文章。

    一键退出

    如果在操作一个 App 时已经进入了好几个界面,想退出的时候可能需要按好几次 Back 键才行。书中给出了一个很不错的方案。

    • 新建一个 ActivityCollector 类 作为 Activity 管理器,代码如下:
    public class ActivityCollector {
    
        public static List<Activityactivities =new ArrayList<Activity>();
    
        public static void addActivity(Activity activity){
            activities.add(activity);
        }
    
        public static void removeActivity(Activity activity){
            activities.remove(activity);
        }
    
        public static void finishAll(){
            for(Activity activity : activities){
                if(!activity.isFinishing()){
                    activity.finish();
                }
            }
        }
    }
    
    • 创建一个 BaseActivity 继承 Activity,重写 onCreate()、onDestroy() 方法,代码如下:

    public class BaseActivity extends Activity {

      @Override
      protected void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
          ActivityCollector.addActivity(this);
      }
    
      @Override
      protected void  onDestroy(){
          super.onDestroy();
          ActivityCollector.removeActivity(this);
      }
    

    }

    • 在所有的 Activity 中继承 BaseActivity

    • 在需要一键退出的地方调用 ActivityCollector.finishAll()

    其它(Miscellaneous)

    尽管我试图在本文中尽量完整的进行描述,但受限于篇幅和我的个人水平,本文难免有所遗漏,欢迎在评论中指出。
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

    关于作者(About Me)

    addict
    原文链接:http://www.cnblogs.com/DebugLife/p/4351970.html

    本文谢绝转载,如需转载需征得作者本人同意,谢谢。

  • 相关阅读:
    Linux文档中翻页和搜索关键字
    windows安装mysql
    生成二维码和解析二维码
    powerdesigner通过er图生成mysql执行文件
    powerdesigner使用遇到的一些问题
    UnsupportedOperationException异常
    String[]和List的区别及相互转换
    @PostConstruct注解原理解析
    git强制更新并覆盖本地修改
    Dubbo架构与底层实现
  • 原文地址:https://www.cnblogs.com/DebugLife/p/4351970.html
Copyright © 2020-2023  润新知