2015-05-11 28 views
0

我无法找到应用程序是否处于活动状态(在后台)。例如,如果用户处于活动A(启动器/主要活动)并导航到活动B,然后在一段时间后进入后台,或者如果android需要内存,它会杀死应用程序,如果用户想要下一次该应用程序从后台启动,或者从主屏幕启动,它会将他带到活动A,尽管他将它发送到活动堆栈顶部的活动B的背景。安卓将应用程序返回到用户所在的位置是合乎逻辑的。Android和后台应用程序

以前,我试着用静态变量来处理它,但是我发现android会杀死应用程序,所以我写入该变量的任何东西都会丢失。

这将是很好的,如果在杀死应用程序之前会有一些来自android操作系统的通知。我拼命寻找一些解决方案,但没有找到满足我需求的任何东西。

如果您能指点我某种解决方案,我将不胜感激。

UPDATE:

我有恢复数据的逻辑,但我不知道,如果应用程序在后台或不?

我想要做这样的事情

if(inBackground) 
{ 
restore(); 
} 
+0

您是否尝试过使用Android为这种情况提供的存储设施? Activity中的'onSaveInstanceState'方法例如? – nekavally

+1

如果您将变量值或最后一个屏幕状态存储在android共享偏好设置中,则会更好。在应用程序启动时,您将获得已保存的变量值。 –

回答

0

试试这个: 在一个BaseActivity所有活动扩展:

protected static boolean isVisible = false; 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    setVisible(true); 
    } 


    @Override 
public void onPause() 
{ 
    super.onPause(); 
    setVisible(false); 
} 

每当你需要检查你的任何应用程序的活动是在前台只是检查isVisible();

0
  1. 你可以捆绑A的状态变量,并将其发送给B,让B可发送回A后(如果A就会被杀死),所以你可以恢复以前的状态。这要求您要保存的数据可以被serilizable。

  2. 使用onSaveInstanceState的建议(@Valentin)将保存视图中存储的viewHierarchy和数据。这有点令人困惑,因为正确的使用需要调用onCreate,OnSavedInstanceState中的超级函数,而不是所有的东西都被保存......只是ViewHierarchy的东西(textView中的文本,滚动位置等)。您必须手动向捆绑软件添加/检索类字段,因此像#1一样,您的数据必须可以被serilizable。

  3. 如果数据无法序列化,您可以尝试在Activity B中直接创建对数据对象的引用,这样当Activity A被杀死时,数据对象将被保留,因为它被Activity B引用为好吧,B可以将参考传递回A.

+0

我同意你的看法,但我只需要知道应用程序是否在后台 –

+0

创建一个弱引用到Activity A,检查它是否为null,然后调用它的isDestroyed方法。 – NameSpace

相关问题