查看Activity生命周期图,我注意到onPause()和onStop()都可能导致“进程”被终止。这需要在用户想要恢复其应用程序时调用onCreate()。关键是onStop()不一定被调用,onDestroy()也不是,但是onPause()可能是唯一的事件Activity可能会看到。在这种情况下,onPause()必须处理保存应用程序状态,以便用户稍后可以返回到它,而不管onStop()是否被调用。我可以看到onDestroy()被用来清理Activity特定的资源,这些资源自然会在进程终止操作中被消除。onDestroy()还有什么用处吗?onStop()有什么用?我为什么要
为了研究Android服务,我写了一个测试程序,在屏幕上有“绑定(bind)服务”、“解除绑定(bind)服务”和“发送回显”三个按钮。单击时,它们会使用bindService()、unbindService()和Messenger与服务进行通信。这是服务代码:publicclassMessengerServiceextendsService{privatefinalMessengermMessenger=newMessenger(newTempHandler());privateclassTempHandlerextendsHandler{@Overridepublicvoidhan
我对Activity.onDestroy()感到困惑。当我的Activity被销毁时,我需要释放一些资源,但似乎onDestroy()只是在我按下“后退”键时被调用,而不是当我的Activity被Dalvik杀死时。我只是通过添加日志来测试它:Log.v("my_tag","onDestroy()called");在onCreate()方法中也是如此:Log.v("my_tag","onCreate()called");然后我开始我的Activity,我在日志中看到:onCreate()已调用。我按“后退”键,然后再次启动Activity,然后我看到:onDestroy()called
当我使用“正在运行的服务”选项卡下的停止按钮停止服务时,将调用onDestroy()方法。但是当我强制停止应用程序时,永远不会调用onDestroy()。对此有什么解释吗?或者也许是在强制停止时触发onDestroy()的解决方案? 最佳答案 当您强行停止应用程序时,就会发生这种情况-即强行停止。没有警告,没有回调,只是停止了。整个进程被终止,并且没有任何正在运行的组件(Activity、服务等)收到任何警告。绝对没有保证onDestroy()会被调用。将任何应用程序关键代码移至onPause(),它在大多数情况下都会被调用。
我知道对于一个ActivityonDestroy(...)不能保证被调用。根据文档,Therearesituationswherethesystemwillsimplykilltheactivity'shostingprocesswithout>callingthismethod(oranyothers)init,soitshouldnotbeusedtodothingsthatare>intendedtoremainaroundaftertheprocessgoesaway.这是否也适用于fragment?文档中没有说明任何内容,只是想确认一下。 最佳答案
我构建了一个服务,但它没有按预期工作,所以我调试了它。调试的时候看到服务的onDestroy()方法是在onCreate()返回后直接调用的。当我注释掉onDestroy()中发生的清理时,该服务开始工作,但这不应该是我的解决方案。所以我的问题是,为什么这么早调用onDestroy()以及为什么服务仍在运行?或者如何防止onDestroy()在错误的时间被调用?供您引用:我已将IntentService子类化。感谢您的帮助。比比克 最佳答案 如果你继承IntentService你应该使用onHandleIntent(Intentin
这个问题在这里已经有了答案:onDestroy()-tosetornottosetinstancevariablestonull?(1个回答)关闭8年前。我是否应该在onDestroy(或onDetach)方法中将fragment的所有变量显式设置为null以避免内存泄漏?或者没有必要,当fragment被“销毁”时,它们将被GC。最佳做法是什么?提前致谢!
我在停止播放音频文件的服务时遇到了很大的问题。我想在播放另一个文件之前停止当前服务。Activity:publicvoidplayTrack(Viewview){Intenti=newIntent(this,playService.class);i.setAction("com.c0dehunterstudios.relaxer.PLAY");if(isPlaying){stopService(i);isPlaying=false;Log.v("ACTIVITY","Stopping..");}startService(i);isPlaying=true;}服务:@Overridepu
我想在我的前台服务被销毁后删除一个通知。我尝试从onDestroy()和unbind()调用stopForeground(true)。尽管调用了onUnbind()和onDestroy()(我可以从日志中看到)通知仍然存在。我通过从我的Activity中调用unbindService(playerConnection)和stopService(this)来停止服务。为什么这样不行?关于如何在服务被破坏时删除通知有什么想法吗?更新:我在玩弄通知时注意到一件有趣的事。我在服务中做了一个特殊的方法:funhideNotification(){stopForeground(true)Log.d
这是关于POST-honeycomb(即Android3.0+)的,下面的引用来自https://developer.android.com/reference/android/app/Activity.html根据生命周期,onStop和onDestroy是可杀死的,这意味着:Notethe"Killable"columnintheabovetable--forthosemethodsthataremarkedasbeingkillable,afterthatmethodreturnstheprocesshostingtheactivitymaybekilledbythesystem