Android finish()自动回调时机,Activity资源释放逻辑放在onDestroy中一定合适吗

首先看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();
    }
}

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

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

猜你喜欢

转载自blog.csdn.net/immrwk/article/details/80265289