Android活动生命周期处理
我是android编程新手,我想澄清一下活动生命周期的概念 为了简单起见,我将案例缩短如下:Android活动生命周期处理,android,android-activity,activity-lifecycle,Android,Android Activity,Activity Lifecycle,我是android编程新手,我想澄清一下活动生命周期的概念 为了简单起见,我将案例缩短如下: 有2个活动(MainActivity和Main2Activity) 在MainActivity中,会创建一个按钮以打开Main2Activity 在Main2Activity中,为了模拟用户在显示Main2Activity后返回MainActivity,它调用finish()并在onCreate()中返回MainActivity 当点击按钮时,我发现似乎出现了竞速情况 MainActivity::
- 有2个活动(MainActivity和Main2Activity)
- 在MainActivity中,会创建一个按钮以打开Main2Activity
- 在Main2Activity中,为了模拟用户在显示Main2Activity后返回MainActivity,它调用finish()并在onCreate()中返回MainActivity
- MainActivity::onCreate()不确定解决方案是否正确,但请尝试一下
关于Main2Activity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // return to MainActivity new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); } },5000); // finish self finish(); }
这将在5秒后调用StartTactivity。。这将给finish足够的时间调用整个生命周期不确定这是解决方案,但请尝试一下 关于Main2Activity.java@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); // return to MainActivity new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); } },5000); // finish self finish(); }
这将在5秒后调用StartTactivity。。这将使finish有足够的时间调用整个生命周期您可以在第一个MainActivity实例上调用
下面是此方法的示例 这看起来像:isFinishing()
if (isFinishing()) { //onDestroy() has not been called yet } else { //onDestroy() has been called already }
您可以在第一个MainActivity实例上调用
下面是此方法的示例 这看起来像:isFinishing()
if (isFinishing()) { //onDestroy() has not been called yet } else { //onDestroy() has been called already }
问得好!你为什么认为这是个问题?(好吧,你对此无能为力,运行时会以自己的速度完成/销毁活动。这取决于Android版本和硬件以及其他因素,如当前有多少其他应用程序请求资源)我计划在活动被销毁时释放资源。如果不保证在创建同一活动的新实例之前调用onDestroy(),它将意外释放另一个实例正在使用的单例资源。问得好!你为什么认为这是个问题?(好吧,你对此无能为力,运行时会以自己的速度完成/销毁活动。这取决于Android版本和硬件以及其他因素,如当前有多少其他应用程序请求资源)我计划在活动被销毁时释放资源。如果不保证在创建同一活动的新实例之前调用onDestroy(),它将意外释放另一个实例正在使用的单例资源。否,
不检查这一点。阅读链接到的文档。谢谢。我将尝试这种方法来检查onPause()中的isFinishing()值,如果为true,则释放资源。@MarcinOrlowskiisFinishing()
在这里被显式调用。对该方法的调用最终将触发onDestroy()。有关详细信息,请参阅此答案:finish()
无法说明是否按照您的评论调用了isFinishing()
。事实上,如果是,那么您的实例已经死了。不,这不是onDestroy()
正在检查的。阅读链接到的文档。谢谢。我将尝试这种方法来检查onPause()中的isFinishing()值,如果为true,则释放资源。@MarcinOrlowskiisFinishing()
在这里被显式调用。对该方法的调用最终将触发onDestroy()。有关详细信息,请参阅此答案:finish()
无法说明是否按照您的评论调用了isFinishing()
。事实上,如果是的话,那么您的实例已经死了。对于竞争条件,使用延时方法似乎不是一个好的解决方案。无论如何,谢谢。对于比赛情况,使用延时方法似乎不是一个好的解决方案。无论如何,谢谢你。onDestroy()