ef2*_*011 10 android activity-lifecycle android-windowmanager android-activity
通常,通过调用退出我的应用程序:
android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)
表现良好而没有事故.
但每隔一段时间,应用程序将重新启动(退出后!).
相关的日志片段显示:
.631: I/Process(15495): Sending signal. PID: 15495 SIG: 9
.641: W/AudioFlinger(121): write blocked for 252 msecs, 1279 delayed writes, thread 0xdc18
.651: I/ActivityManager(164): Process com.ef.myapp (pid 15495) has died.
.651: I/WindowManager(164): WIN DEATH: Window{463659e8 com.ef.myapp/com.ef.myapp.MainActivity paused=false}
.661: I/AudioService(164): AudioFocus abandonAudioFocus() from android.media.AudioManager@460b2b98
.701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}
Run Code Online (Sandbox Code Playgroud)
我知道,通过Android OS的设计,killProcess()不是终止应用程序的正确方法.这是因为killProcess()会立即停止进程,而不会给予应用程序阻止或准备它的任何方式或机会.
我知道当我调用finish()时,应用程序堆栈只是被推到后台(并且仍然存在于内存中).Android本身决定何时关闭应用程序(即从内存中删除其实例),通常这是在应用程序变为"最长时间未使用的最长时间"时完成的.如果它真的是最后一个,它的行为实际上更容易预测.
问题是finish()只会停止并销毁调用它的活动.它不会阻止应用程序或其他活动产生的其他活动.因此,为了便于在开发过程中进行测试和调试,我使用 killProcess()作为方便的快捷方式.
但是现在我看到这有副作用,有时候会在自杀之后立即重新启动 - 所有这些都在30毫秒内完成.
一个简单的解决方案是遍历所有应用程序的活动并完成它们.但与此开始之前,我渴望了解什么在Android OS提出申请复活本身.
为什么 Android会重启被杀死的应用程序?
为什么不一致?(即有时)
应用程序首次从安装程序、Web 浏览器和 IDE(IntelliJ、Eclipse 等)启动的方式存在一个已知错误。请尝试在不启动的情况下安装您的应用程序,然后从可用应用程序列表中启动它,看看问题是否消失。请参阅很久以前提交的与该问题相关的这些问题:
http://code.google.com/p/android/issues/detail?id=2373
http://code.google.com/p/android/issues/detail?id=26658
| 归档时间: |
|
| 查看次数: |
6902 次 |
| 最近记录: |