Android开发艺术探索--Activity、Context

本博客内容是对阅读《Android开发艺术探索》第一章Activity生命周期的知识进行记录(个人笔记)。

Activity的生命周期七个回调函数大家都很熟悉,不再介绍。说明一些注意点:
1.用户打开一个新的Activity或者按home键切回到桌面,回调为:onPause -> onStop。这里有一种特殊情况,如果新的Activity采用了透明主题,那么上一个Activity不会回调onStop函数。

这里要说明:
onCreate — onDestroy
onStart — onStop
onResume — onPause

这里onCreate和onDestroy是一对,onStart和onStop是一对,onResume和onPause是一对。那么onStart和onResume的区别是什么?
onStart函数:当前Activity已经可见,但是还不能与用户交互,所以不能获取焦点。
onResume函数:当前Activity已经可见,并且已经可以用户交互,可以获取焦点。
所以这两个函数唯一的区别就是onStart无焦点(从不可见到可见),onResume有焦点(一直可见),所以这就可以解释上面提到的注意点,为什么新的Activity采用透明主题,不会回调onStop,因为他只失去了焦点,但是尚可,所以只调用了onPause,未调用onStop。

2.当启动一个新的Activity时,旧的Activity会先调用onPause,新的Activity才会启动,调用其生命周期函数:onCreate->onStart->onResume。所以在onPause中不应该做大量复杂耗时的操作,否则会影响下一个页面的绘制。

3.在Activity中,平常会看到三个地方都是代表context,分别是getApplicationContext(),getBaseContext(),this
三个返回的都是context,那么有什么区别呢?

  • this的话很好理解,this代表的是这个类的实例,比如MainActivity这个被创建的实例。因为Activity是继承自ContextThemeWrapper->ContextWrapper->Context,所以this这个实例当然是context对象了。
  • 有的时候this虽然很好用,但是并不是所有时候都可用的,比如说在为一个按钮添加onClickListener的时候,onClick函数中若想获取activity的实例,就不能直接写this了,因为此时的this代表的是OnClickListener这个实例。这里你可以用getBaseContext()或者MainActivity.this。getBaseContext返回的context和this是不一样的,目前还不知道getBaseContext返回的context是什么还不清楚。
  • getApplicationContext返回的是应用的上下文,声明周期是整个应用,应用摧毁他才摧毁。注意的是不可用这个getApplicationContext去startActivity,会抛出异常,因为这个context和activity的context是不一样的。

你可能感兴趣的:(android)