无法重新启动由挂起的意向启动的活动



我无法重新启动PendingIntent启动的一个活动。

" cannot restart"没有任何意义,例如,onCreateonNewIntent is never calledstartActivity()关于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。这个行为很奇怪,因为挂起的意图工作没有问题,直到设备重新启动。

相关内容

  • 没有找到相关文章

最新更新