首先看Google对finish()的描述,

Call this when your activity is done and should be closed. The
ActivityResult is propagated back to whoever launched you via
onActivityResult().

当activity完成并且应该被关闭的时候,finish()会被回调,在源码中,finish()方法有多处调用,那么在activity的几个生命周期函数中,finish()会在哪个生命周期函数之前或之后呢,下面我们写一段测试代码观察一下。

public class TestActivity extends Activity {    private static String TAG = "TestActivity";    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);        Log.e(TAG, "oncreate time=" + System.currentTimeMillis());    }    @Override    protected void onResume() {        super.onResume();        Log.e(TAG, "onResume time=" + System.currentTimeMillis());    }    @Override    protected void onStart() {        super.onStart();        Log.e(TAG, "onStart time=" + System.currentTimeMillis());    }    @Override    protected void onPause() {        super.onPause();         Log.e(TAG, "onPause time=" + System.currentTimeMillis());    }    @Override    protected void onStop() {        super.onStop();        Log.e(TAG, "onStop time=" + System.currentTimeMillis());    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.e(TAG, "onDestroy time=" + System.currentTimeMillis());    }    @Override    public void finish() {        super.finish();        Log.e(TAG, "finish time=" + System.currentTimeMillis());    }}

代码很简单,操作方法为,进入activity然后按返回键退出,观察log输出发现,finish()在以上几个生命周期函数中,回调的时机位于onResume()和onPause()之间,主动调用finish()方法,顺序同样如此。
下面附上控制台输出:

为什么提一下这个?
因为我们平时习惯性的会把一些资源释放和销毁工作放在onDestroy()中进行,但是onDestroy()并不一定是在activity退出时就回被立刻回调,这样反复进入退出activity就有可能出现一些不可预知的错误,比如实际开发中业务逻辑会很多,就可能导致一些资源还没有被释放的情况被再次使用,所以在这种情况下,应该把这些资源释放销毁的动作放到finish()中进行,从而保证activity被频繁创建时不会出问题。

补充:在阿里发布的的阿里巴巴Android开发手册中也提到了这一点,是一个推荐级的说明:

【推荐】不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的 销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在 Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。

更多相关文章

  1. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  2. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  3. 对hint 设置大小及颜色,可用此方法对字符串设置不同颜色或大小
  4. android 3.0 ationbar使用总结
  5. Android(安卓)Stuido无法下载jcenter库
  6. Android中使用HttpGet和HttpPost访问HTTP资源(一)
  7. Android(安卓)Studio Gradle构建报错,Error:Execution failed for
  8. Android(安卓)问题之找不到资源解决办法
  9. Android(安卓)资源文件的命名规范问题

随机推荐

  1. Android(安卓)Http请求
  2. Android(安卓)Wi-Fi 修改国家码(QCOM平台
  3. ADT下载地址整理
  4. LocationManager 的requestLocationUpdat
  5. android9.0 关闭launcher界面的搜索框
  6. 关于屏幕解锁的实例
  7. Android(安卓)小代码集
  8. 第十二节(android常用控件三)
  9. Android内存使用情况的应用实例
  10. androidの获取android手机信息