有一个程序。程序启动时,其默认顺序是LauncherActivity==>MainActivity.
在LaucherActivity处理完一些系统初始化工作后,再用startActivity来启动MainActivity.
这个流程在模拟器上是正常的。在Nexus One上,偶尔启动会不正常。
Nexus One上正常的LOG如下:
I/ActivityManager( 96): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zerosoft.FreeMoney/.Activity.LaunchActivity bnds=[245,392][355,510] } from pid 179
I/ActivityManager( 96): Start proc com.zerosoft.FreeMoney for activity com.zerosoft.FreeMoney/.Activity.LaunchActivity: pid=11495 uid=10083 gids={3003}
V/RenderScript_jni( 179): surfaceDestroyed
D/LaunchActivity(11495): onCreate
D/LaunchActivity(11495): onResume
D/LocalDatabase(11495): initialize
D/LaunchActivity(11495): lanchMainActivity
I/ActivityManager( 96): Starting: Intent { cmp=com.zerosoft.FreeMoney/.Activity.MainActivity } from pid 11495
D/MainActivity(11495): onCreate
D/MainActivity(11495): onResume发生错误时的LOG如下:
I/ActivityManager( 96): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zerosoft.FreeMoney/.Activity.LaunchActivity bnds=[245,392][355,510] } from pid 179
I/ActivityManager( 96): Start proc com.zerosoft.FreeMoney for activity com.zerosoft.FreeMoney/.Activity.MainActivity: pid=11472 uid=10083 gids={3003}
D/MainActivity(11472): onCreate
D/MainActivity(11472): onResume这个问题搞得很头大。由于极偶尔才出现,调试已经花了很长时间了。求各位大虾帮忙。
在LaucherActivity处理完一些系统初始化工作后,再用startActivity来启动MainActivity.
这个流程在模拟器上是正常的。在Nexus One上,偶尔启动会不正常。
Nexus One上正常的LOG如下:
I/ActivityManager( 96): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zerosoft.FreeMoney/.Activity.LaunchActivity bnds=[245,392][355,510] } from pid 179
I/ActivityManager( 96): Start proc com.zerosoft.FreeMoney for activity com.zerosoft.FreeMoney/.Activity.LaunchActivity: pid=11495 uid=10083 gids={3003}
V/RenderScript_jni( 179): surfaceDestroyed
D/LaunchActivity(11495): onCreate
D/LaunchActivity(11495): onResume
D/LocalDatabase(11495): initialize
D/LaunchActivity(11495): lanchMainActivity
I/ActivityManager( 96): Starting: Intent { cmp=com.zerosoft.FreeMoney/.Activity.MainActivity } from pid 11495
D/MainActivity(11495): onCreate
D/MainActivity(11495): onResume发生错误时的LOG如下:
I/ActivityManager( 96): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zerosoft.FreeMoney/.Activity.LaunchActivity bnds=[245,392][355,510] } from pid 179
I/ActivityManager( 96): Start proc com.zerosoft.FreeMoney for activity com.zerosoft.FreeMoney/.Activity.MainActivity: pid=11472 uid=10083 gids={3003}
D/MainActivity(11472): onCreate
D/MainActivity(11472): onResume这个问题搞得很头大。由于极偶尔才出现,调试已经花了很长时间了。求各位大虾帮忙。
我是在onResume中启动的一个thread,处理一些事情后,再由Handler.sendMessage来发送一个消息,然后在handleMessage函数中,执行startActivity。
因为是一个启动画面,所以不会有点击事件,事情处理完之后,就自动跳入了主画面了。
我把log.d放在每个函数的开头,对于启动主画面的函数还有专门的打印"lanchMainActivity是放在",你可以在我贴出来的正常启动的log中,看到onCreate、onResume和lanchMainActivity都被打印出来了。
但在出错的情况下,可以看到Launcher画面所有的log都没有出来,也就是说一个函数都没有被调用,包括onCreate。系统就自动的启动了主画面,也就是程序的第二个画面了。
我试着看看两种情况:一种是打开程序,按home键返回桌面,再等上一天后启动程序,会不会崩溃。一种是返回键退出程序,等上一天后再启动程序。
如果不是重启动,那已经完成初始化的实例就不会变成null了吧?现在问题就是跳了第一个,所以第一个画面做的初始化动作没有进行,实例都是null.
不用关心代码放哪里。因为LaucherActivity的所有函数都没有被调用。而我的困惑就在于为什么LauncherActivity不被调用?
至于debug,不可能啊,在真机上,模拟器上不会出问题的。
目前应该可以确认没有重新启动,而且系统的一些静态变量都已经被释放了,所以拿到很多NULL。
目前看来只能在程序中判断程序中静态变量变成NULL后,再重新进行一次初始化动作了。不过这样基本上对这些变量进行使用时,都要进行一次判断。不知道各位有好的解决办法吗?