我无法重新启动PendingIntent
启动的一个活动。
" cannot restart"没有任何意义,例如,onCreate或onNewIntent is never called当startActivity()
关于activity已经运行时。
名为MainActivity I cannot restart的Activity是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
通过带有挂起意图的通知启动。
My PendingIntent is:
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()
。
但是当程序通过在主屏幕上按图标启动时,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上不出现
这是Android的一个bug。
问题是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年之前得到解决;-)
在我的情况下,我只在重新启动后遇到此问题。如果能知道原因就好了。为了使我的PendingIntent
s在重新启动后工作,我在Intent
本身添加了以下标志:
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
和PendingIntent.FLAG_CANCEL_CURRENT
对应PendingIntent
。这个行为很奇怪,因为挂起的意图工作没有问题,直到设备重新启动。