无法重启PendingIntent启动的活动

时间:2013-03-02 14:37:50

标签: android android-intent android-pendingintent launchmode

我无法重启PendingIntent启动的一项活动。

“无法重启”意味着什么,例如,当关于已经运行的活动的startActivity()时, onCreate onNewIntent 从未调用

名为MainActivity的活动我无法重启 singleTop 并覆盖 onNewIntent

这里显示了MainActivity。

 <activity
            android:name="com.example.MainActivity"
            android:label="@string/app_name" 
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

首先,MainActivity通过pendingintent的通知启动。

我的PendingIntent是

Intent iS = new Intent(this,MainActivity.class);
iS.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendindIntent pi = PendingIntent.getActivity(this, 0, iS, PendingIntent.FLAG_UPDATE_CURRENT);

MainActivity执行startService(),服务执行sendBroadcast(), 并且BroadcastClass执行startActivity(Intent(this,MainActivity.class))

这是BroadcastClass。

public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context,MainActivity.class);

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

然后onNewIntent是......永远不会被称为onCreate。

但是当在homeScreen上按下图标启动程序时,MainActivity中的onNewIntent会被同一个流调用。

抱歉我的英语不好。 如果你不介意的话,请告诉我修改的句子。

编辑: onNewIntent就在这里。

protected void onNewIntent(Intent intent) {  
   Log.d("onNewIntent","onNewIntent");
   String SOMETHING = intent.getStringExtra("SOMETHING");

    LinearLayout ll = (LinearLayout)findViewById(R.id.ll2);
    ll.removeAllViews();
    TextView textview1 = (TextView)getLayoutInflater().inflate(R.layout.textview, null);

    textview1.setText(SOMETHING);
    ll.addView(textview1);
}

“onNewIntent”未出现在LogCat上。

2 个答案:

答案 0 :(得分:1)

这是bug in Android。另见this

问题是Android中决定是否调用onNewIntent()的代码正在使用Intent中的标志而不检查清单中的标志。

您应该可以通过在从广播接收器启动活动时添加Intent.FLAG_ACTIVITY_SINGLE_TOP来解决此问题,如下所示:

public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context,MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    context.startActivity(i);
}

如果您在Google代码上标注并评论问题,也会有所帮助。如果我们制造足够的噪音,这可能会在2020年之前得到修复; - )

答案 1 :(得分:0)

就我而言,我仅在重新启动后遇到了此问题。知道为什么会很棒。 为了使我的PendingIntent重新启动后正常工作,我在Intent本身上添加了以下标志:

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

PendingIntent.FLAG_CANCEL_CURRENTPendingIntent。这种行为很奇怪,因为待处理的意图在设备重新启动之前不会有任何问题。