应用程序处于后台时,startActivity()不起作用(在此特殊情况下)

时间:2015-10-14 19:45:52

标签: android android-intent background start-activity android-intentservice

我试图将我的应用从背景带到前台。在我的自定义onHandleIntent()课程的IntentService中,我有:

Intent intent = new Intent();
intent.setClass(getApplicationContext(), MainActivity.class); // Also tried with "this" instead of getApplicationContext()
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
startActivity(intent);

现在这段代码一见钟情,但我找到了一个不起作用的场景。如果您打开了应用程序并通过主页按钮将其置于后台并在约5秒内执行startActivity(),那么在应用程序到达前台之前会有一段延迟。这是一个已知的实现,您可以在stackoverflow上找到讨论的主题。在这种情况下,应用程序成功地从后台到前台。

如果您重复上述相同的实验,但不是等待应用程序到达前台,而是围绕手机浏览(滚动,滑动等)(我在Google Play商店中浏览)。结果是startActivity()将被调用但应用程序不会出现在前台。

我不是要求解决方案,而是更多地解释为什么会发生这种情况。这是预期的行为吗?

3 个答案:

答案 0 :(得分:0)

使用班级的上下文。 例如

Intent intent = new Intent(context,other.class)

而不是getapplicationContext()

答案 1 :(得分:0)

使用代码:

 private void startMenuActivity() {
        Intent i = new Intent(this, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        finish();
    }

答案 2 :(得分:0)

下面的代码对我有用,

    val login = Intent(applicationContext, SignInActivity::class.java)
    login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
    login.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    applicationContext.startActivity(login)