怎样实现android 返回到上一个Activity并重新执行一次onCreate方法

对于android新手来说,大都对activity的生命周期不是太了解,有关activity的生命周期方法执行顺序,我这里看到一篇文章http://www.2cto.com/kf/201409/334386.html

如下是一段典型的从AActivity切换到BActivity的日志,:

10-17 20:54:46.997: I/com.example.servicetest.AActivity(5817): onPause() 1166919192 taskID=66
10-17 20:54:47.021: I/com.example.servicetest.BActivity(5817): onCreate() 1166971824 taskID=66
10-17 20:54:47.028: I/com.example.servicetest.BActivity(5817): onStart() 1166971824 taskID=66
10-17 20:54:47.028: I/com.example.servicetest.BActivity(5817): onResume() 1166971824 taskID=66
10-17 20:54:47.099: I/com.example.servicetest.AActivity(5817): onStop() 1166919192 taskID=66

先AActivity的onPause()被调用,然后是BActivity的初始化流程(onCreate() --> onStart() --> onResume()),再然后是AActivity的onStop()被调用。

了解了activity生命周期方法的执行顺序之后,我们就可以解决文章标题中提到的问题。

新手们大多都喜欢把所有的初始化都写在onCreate()方法里面

如果所有的初始化都在onCreate()中实现,会有什么问题?

出自http://www.2cto.com/kf/201409/334386.html

首先,Activity的onCreate()被调用时,Activity还不可见,如果要做一些动画,既然视图还不存在,在onCreate中来启动动画,明显有问题;

其次,AActivity 切换到 BActivity,再切换到 AActivity(我们假定是AActivity的同一个实例),由于实例已经存在,所以onCreate不会再被调

用,那AActivity从后台切换至前台时,有可能需要一些初始化,那就没法再被调用到了,也有问题;


所以Activity从后台切换至前台时,如果需要一些初始化,就必须将初始化写在onResume ()方法里面


Android 中,Activity生命周期方法 onResume() 应该在 Activity 可见并且能够与用户交互之前被执行。如果 onResume 方法偶尔不执行,可能是由于以下原因之一: 1. Activity生命周期被系统中断或销毁了。例如,当用户旋转设备时,Activity 可能会被销毁并重新创建。在这种情况下,onResume 方法将被调用,但是必须先执行 onCreate 和 onStart 方法。 2. Activity 代码中存在 bug 或阻塞操作。例如,如果您在 onResume 方法执行长时间运行的操作或阻塞 UI 线程,该方法可能会被延迟或不执行。 3. 系统资源不足。如果系统资源不足,可能会导致 Activity 生命周期的异常中断或延迟。 为了解决这个问题,您可以尝试使用以下方法: 1. 确保 Activity 代码不会阻塞 UI 线程,并在需要长时间运行的操作时使用异步任务或线程池。 2. 检查您的 Activity 是否正确处理了系统中断和销毁事件,并在必要时恢复状态。 3. 检查您的应用程序是否在内存和其他系统资源方面存在问题,并优化代码以减少资源消耗。 另外,如果您使用了 startActivityForResult() 方法启动新的 Activity 并且在新的 Activity 中调用了 setResult() 方法返回结果,则必须在当前 Activity 中重写 onActivityResult() 方法以接收返回结果。如果您未正确处理 onActivityResult() 方法,则可能导致 onResume() 方法不被正确调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值