我有一个 Android Activity ,有时由用户启动,有时由服务启动。从服务启动时(通过发送由我的 Activity onNewIntent() 回调接收到的 Intent)我只想让它在已经运行时更新其屏幕,但如果它尚未运行则不开始运行。
我尝试实现此目的的安排是在 onResume() 期间在我的 Activity 中设置一个 bool 值,并在 onPause() 期间清除该 bool 值,但我注意到 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() 之前立即运行的估计,但我希望这里有人可能知道更好的方法?
我实际上使用的是 Fragments 而不是普通的 Activity,但这并没有改变任何重要的东西。
谢谢,
最佳答案
如果您只想知道您的 Activity 是否已经在前台,那么将尝试此代码段:
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
}
}
}
关于android - 如何在调用 onNewIntent() 时检测我的 Android Activity 是否已经在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634425/