0

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

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

请注意,我不能使用 Activity.OnPause/OnResume 方法。我的应用程序中有很多活动,如果我要处理 OnPause/OnResume,有可能在一瞬间,当用户将一个活动切换到另一个活动时,应用程序看起来像后台,实际上它会是前台

4

3 回答 3

0

请注意,我不能使用 Activity.OnPause/OnResume 方法。我的应用程序中有很多活动,如果我要处理 OnPause/OnResume,有可能在一瞬间,当用户将一个活动切换到另一个活动时,应用程序看起来像后台,实际上它会是前台

为什么不编写一个基类来扩展Activity和启用或禁用这些方法中的服务?之后,从此基础活动扩展您的所有活动。如果你在你的活动中重写这些方法,你所要做的就是调用超类方法,例如通过调用super.onResume()inside onResume(),以确保这些方法仍然被调用。如果你不覆盖它们,一切都会直接进行。

于 2011-09-22T09:35:56.553 回答
0

问题通过以下方式解决(C# 代码,用于 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!!!!");
    }
  }
}
于 2012-01-26T19:13:18.030 回答
0

据我所知,这不是一种干净的方法,但是,

您也许可以向您的服务发送一个onCreate()带有onPause()唯一标识符的意图。

然后,您的服务可以启动一个计时器(其延迟将比每个活动之间的差onPauseonCreate被调用的时间长),如果onCreate()在此时间内未收到通知,则会将活动设置为“暂停”。

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

于 2011-09-22T09:40:43.760 回答