我遇到一个棘手的问题,我必须知道是谁导致我的活动进入后台。我的意思是如果我的活动 onPause 方法被调用,我必须知道哪个其他活动将 onResume。
3 回答
查看 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
标志的任务。
你检查过这个吗???
您的答案:
假设我的 android 项目中有两个活动。活动A和活动B
当前 ActivityA 正在运行。
ActivityA 进入后台(onPaush)时
- 从活动A转到活动B
- 按下主页按钮
- 任何其他活动进入前台(例如:来电进入您的设备)
所以以上是可能的 avtivityA 在 onPaush和任何其他活动在 onResume。
因此,屏幕上显示的 Activity 在 onResume 中。
希望你能理解......
在活动内部使用两个静态标志(一个用于活动进入后台,另一个用于存储活动调用,使用这些变量,
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;
,这是所有设备进入后台的唯一方法(当单击主页按钮并睡眠时)..