Android OnApplicationPause / OnApplicationResume

时间:2011-09-22 09:27:42

标签: android android-activity onresume onpause

当我的Android 应用程序进入后台并返回时,有什么方法可以处理吗?

我想使用通知服务进行在线游戏 - 我使用的服务会在游戏中发生某些事情时显示警报。我希望仅在我的应用程序处于活动状态时(在前台)显示警报,因此我需要在应用程序进入前台时启动我的服务并在应用程序进入后台时停止它。

请注意,我无法使用Activity.OnPause / OnResume方法。我在我的应用程序中有很多活动,如果我将处理OnPause / OnResume,有可能在某个时刻,当用户将一个活动切换到另一个活动时,应用程序将看起来像背景,彻底它将实际上是前景

3 个答案:

答案 0 :(得分:0)

  

请注意,我无法使用Activity.OnPause / OnResume方法。我有很多   我的应用程序中的活动,如果我将处理OnPause / OnResume,它   当用户将一个活动切换到另一个活动时,有可能   应用程序看起来像背景,彻底它将是前景   实际上

为什么不编写扩展Activity的基类并在这些方法中启用或禁用服务?之后,从此基本活动扩展您的所有活动。 如果您在激活中覆盖这些方法,那么您所要做的就是调用超类方法,例如:通过调用super.onResume()内的onResume()来确保仍然可以调用这些内容。如果你不覆盖它们,一切都会直接起作用。

答案 1 :(得分:0)

这不是我所知道的干净方式,但是,

您可以使用唯一标识符向您的服务onCreate()onPause()发送意图。

然后,您的服务可以启动一个计时器(延迟时间将超过每个活动中调用的onPauseonCreate之间的差异),如果没有通知{{1}在此时间内将活动设置为“已暂停”。

如果您在扩展Activity的父类中添加此功能,则可以通过扩展它而不是Activity(使用必须调用onCreate()和{{1}的合同)将相同的功能拉入每个类。在每个相应的方法中)。

答案 2 :(得分:0)

问题以下列方式解决(C#code,mono for android)

class MyService : Service{
  OnSomethingHappened(){
    ActivityManager am = (ActivityManager) GetSystemService(ActivityService);
    if(am.RunningAppProcesses.Any((arg) => 
      arg.ProcessName == "myprocessname" &&
      arg.Importance == ActivityManager.RunningAppProcessInfo.ImportanceForeground
    )){
       Trace("FOREGROUND!!!!");
    }else{
       Trace("BACKGROUND!!!!");
    }
  }
}