0

我正在开发一个无线电流应用程序和一个主屏幕小部件。问题是当我杀死应用程序时,我想像这样修改主屏幕小部件中的图像:

@Override
protected void onDestroy() {
    //update widget
    WidgetIntentReceiver.updateWidgetFromActivityDestroy(getApplicationContext());

    mMediaPlayer.reset();
    mMediaPlayer.release();
    mMediaPlayer = null;

    System.out.println("End onDestroy -> stop stream");

    super.onDestroy();
}

但是修改小部件的代码并不总是被调用('System.out.println' 没有出现)。我已经读过 onDestroy 并不总是被调用。但我没有找到另一种解决方案?

谢谢。

4

1 回答 1

5

is when I kill the application. 这里的关键词是kill。正如我所理解的那样,杀死你的意思是强制关闭应用程序。如果是这样,那么您将无法更改某些内容。因为当您强制关闭应用程序时,或者即使操作系统出于某种原因(内存限制、电池优化等)终止了您的应用程序 - 没有办法做某事,因为整个应用程序进程(使用您的包名称)被简单地杀死了通过类似Process.killProcess (int pid)没有任何回调的东西。在这样onDestroy()的时刻的行为是完全不确定的。它写在文档中:

[..] There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to remain around after the PROCESS GOES AWAY.

所以不要忘记onDestroy()它是一种与Activity's生命周期紧密绑定的方法,而不是整个应用程序生命周期。作为一种解决方法,您应该创建一些Base Activity并在其中OnPause()做您想要的事情,然后让您的应用程序中的所有其他活动都继承自它。

其他(不应该在生产代码中使用的不好的解决方案)是创建一个背景Service,它将循环检查您的应用程序是否正在运行,actvityManager.getRunningAppProcesses();如果没有,则修改小部件。

于 2013-07-28T15:34:50.880 回答