如果由于内存不足导致Android操作系统杀死我的应用程序(使用服务),那么它将尝试再次运行它。来自android.developers网站:
**请注意,这意味着您的服务大多数时间都在运行,如果系统内存压力过大,可能会被系统杀死。如果发生这种情况,系统稍后将尝试重新启动该服务。 **
如果我的主要活动代码如下:
public static MainActivity mainAct;
protected void onCreate(Bundle savedInstanceState)
{mainAct = this;}
当android OS杀死我的应用程序时,mainAct的值丢失了,因为它在活动中只初始化了onCreate()而不在服务中。
如何“保存”该对象,以便在我的应用程序因内存不足而被杀死时它会保留值?
答案 0 :(得分:0)
您可以在服务中实现onDestroy()方法,以将某些应用程序状态保留到设备。因此,当调用onStartCommand()方法的服务时,您可以检查持久状态(如果存在)并从那时起再次启动应用程序。
例如,如果您有一个从不同来源提取文章的新闻Feed应用程序,您可以在开始下载之前将您的状态写入文件:
download=irishtimes-31_01_2013
因此,如果您的应用程序完全失败,因为有人将电池取出,那么您就可以恢复已知状态。同样,如果Andoid调用您的onDestroy()方法来终止您的服务,您可以以相同的方式将状态持久保存到设备。然后,当您的服务开始备份时,您将拥有可以从文件中读取并加载到“对象”中以便再次使用的状态。
您不仅限于文件。正如@ wtstang02所提到的,你也可以使用数据库。
答案 1 :(得分:0)
public static MainActivity mainAct
会导致内存泄漏问题,例如方向更改频繁。当前活动实例无法通过gc收集,因为mainAct有其参考。