我有一个Android Activity,有时是由用户启动的,有时是从服务启动的。从服务启动时(通过发送我的Activities onNewIntent()回调接收到的Intent)我只是希望它在已经运行时更新其屏幕但是如果它还没有运行则不开始运行。
我尝试实现这一点已经安排在onResume()期间在我的Activity中设置了一个布尔值并在onPause()期间清除但是我注意到onPause()总是在我的Activity接收到onNewIntent()之前调用,所以价值总是假的。
对于那些不熟悉事件序列的人,如下:
startActivity(myIntent); // Called from service with Intent Extra indicating that fact
onPause(); // Overriden method for my Activity
onNewIntent(Intent myIntent); // Overriden method for my Activity
onResume(); // Overriden method for my Activity
我从阅读中理解的是,这种行为是固定的,并且是有意的,没有办法绕过它。我看到的一个建议就是调用onPause()和onNewIntent()之间的时间间隔并将其用作估计我的Activity是否在onNewIntent()之前立即运行但是我希望有人在这里可能知道更好的方法吗? / p>
我实际上使用的是Fragments而不是简单的活动,但这并没有改变任何重要的事情。
谢谢,
答案 0 :(得分:1)
如果您只是想知道您的活动是否已经在前台,那么将尝试使用此代码段:
class MyActivity extends Activity {
private boolean isLaunched;
@Override
protected void onStart() {
super.onStart();
isLaunched = true;
}
@Override
protected void onStop() {
super.onStop();
isLaunched = false;
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (isLaunched) {
//todo
}
else
{
//somethin here
}
}
}