1

我遇到一个棘手的问题,我必须知道是谁导致我的活动进入后台。我的意思是如果我的活动 onPause 方法被调用,我必须知道哪个其他活动将 onResume。

4

3 回答 3

1

查看 ActivityManager 的getRunningTasks以获取最近从其他应用程序启动的活动的列表。

公共列表 getRunningTasks (int maxNum)

返回当前正在运行的任务的列表,最近的是第一个,之后是较旧的。请注意,“正在运行”并不意味着任务的任何代码当前已加载或处于活动状态——任务可能已被系统冻结,以便在下次进入前台时可以以之前的状态重新启动它。

当然,您可能希望使用该标志RECENT_WITH_EXCLUDED来确保您获得所有活动,即使是那些故意将自己排除在该列表之外的活动。

public static final int RECENT_WITH_EXCLUDED

在 API 级别 1 中添加标志用于getRecentTasks(int, int):返回所有任务,即使是那些设置了 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS标志的任务。

此外,如果主屏幕未显示在该列表中,您可能必须在用户按下主屏幕按钮时跟踪它。

于 2013-04-16T05:45:48.217 回答
0

你检查过这个吗???

在此处输入图像描述

您的答案:

假设我的 android 项目中有两个活动。活动A活动B

当前 ActivityA 正在运行。

ActivityA 进入后台(onPaush)时

  1. 从活动A转到活动B
  2. 按下主页按钮
  3. 任何其他活动进入前台(例如:来电进入您的设备)

所以以上是可能的 avtivityA 在 onPaush和任何其他活动在 onResume

因此,屏幕上显示的 Activity 在 onResume 中。

希望你能理解......

于 2013-04-16T05:28:25.157 回答
0

在活动内部使用两个静态标志(一个用于活动进入后台,另一个用于存储活动调用,使用这些变量,

static boolean isActivityCalled=false;
static boolean isGoesToBackGround=false;
@Override
publivc void onResume()
{
   if(isActivityCalled&&isGoesToBackGround)
   {
      //Application is resumes not from other activity
      isActivityCalled=false;
      isGoesToBackGround=false;
   }
}
@Override
public void onUserLeaveHint()
{
    super.onUserLeaveHint();
    isGoesToBackGround=true;
}

当调用任何活动时,然后设置isActivityCalled=true;,这是所有设备进入后台的唯一方法(当单击主页按钮并睡眠时)..

于 2013-04-16T05:38:14.407 回答