Android和后台应用程序
我无法找到应用程序是否处于活动状态(在后台)。例如,如果用户处于活动A(启动器/主要活动)并导航到活动B,然后在一段时间后进入后台,或者如果android需要内存,它会杀死应用程序,如果用户想要下一次该应用程序从后台启动,或者从主屏幕启动,它会将他带到活动A,尽管他将它发送到活动堆栈顶部的活动B的背景。安卓将应用程序返回到用户所在的位置是合乎逻辑的。Android和后台应用程序
以前,我试着用静态变量来处理它,但是我发现android会杀死应用程序,所以我写入该变量的任何东西都会丢失。
这将是很好的,如果在杀死应用程序之前会有一些来自android操作系统的通知。我拼命寻找一些解决方案,但没有找到满足我需求的任何东西。
如果您能指点我某种解决方案,我将不胜感激。
UPDATE:
我有恢复数据的逻辑,但我不知道,如果应用程序在后台或不?
我想要做这样的事情
if(inBackground)
{
restore();
}
试试这个: 在一个BaseActivity所有活动扩展:
protected static boolean isVisible = false;
@Override
public void onResume()
{
super.onResume();
setVisible(true);
}
@Override
public void onPause()
{
super.onPause();
setVisible(false);
}
每当你需要检查你的任何应用程序的活动是在前台只是检查isVisible();
你可以捆绑A的状态变量,并将其发送给B,让B可发送回A后(如果A就会被杀死),所以你可以恢复以前的状态。这要求您要保存的数据可以被serilizable。
使用onSaveInstanceState的建议(@Valentin)将保存视图中存储的viewHierarchy和数据。这有点令人困惑,因为正确的使用需要调用onCreate,OnSavedInstanceState中的超级函数,而不是所有的东西都被保存......只是ViewHierarchy的东西(textView中的文本,滚动位置等)。您必须手动向捆绑软件添加/检索类字段,因此像#1一样,您的数据必须可以被serilizable。
如果数据无法序列化,您可以尝试在Activity B中直接创建对数据对象的引用,这样当Activity A被杀死时,数据对象将被保留,因为它被Activity B引用为好吧,B可以将参考传递回A.
我同意你的看法,但我只需要知道应用程序是否在后台 –
创建一个弱引用到Activity A,检查它是否为null,然后调用它的isDestroyed方法。 – NameSpace
您是否尝试过使用Android为这种情况提供的存储设施? Activity中的'onSaveInstanceState'方法例如? – nekavally
如果您将变量值或最后一个屏幕状态存储在android共享偏好设置中,则会更好。在应用程序启动时,您将获得已保存的变量值。 –