android - 如何在调用 onNewIntent() 时检测我的 Android Activity 是否已经在运行?

标签 android android-intent android-activity onnewintent

我有一个 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/

相关文章:

android - singleTop 可搜索 Activity 在按下后退按钮时终止

android - 与 Android 相比,iOS 上的 ARGB 颜色不同

android - 如何在 Android 中录制音频文件

java - Intent Intents.Insert.ACTION 只在第一次有效吗?

android - 我可以通过代码向同一 Android 设备发送 SMS,还是必须使用反向计费?

android - 如果一个方法在 onResume() 中运行,那么在 onCreate() 中运行该方法是否会是多余的?

android - 从 AsyncTask 更新 Activity

java - getExtras() 返回 null

android - 截图

android - 无法解决错误 - 查看需要 API 级别 14(当前最小值为 8): <GridLayout>