我的应用程序有一个运行活动,可以创建通知.选择通知后,不会转到正在运行的活动,而是销毁正在运行的活动并创建新活动 – IN ANDROID 3.0 AND HIGHER.我该如何防止这种情况?
这个问题已经多次回答,通常在清单中指出标志FLAG_ACTIVITY_CLEAR_top和FLAG_ACTIVITY_SINGLE_top,以及launchMode =“singletop”.但大多数答案都是在Android 3.0之前,那么在新的AndroID版本中需要解决这个问题吗?
以下简单测试应用程序演示了我的问题:
NotifyTest.java:
package com.example.notifytest;import androID.os.Bundle;import androID.app.Activity;import androID.app.notificationmanager;import androID.app.PendingIntent;import androID.content.Context;import androID.content.Intent;import androID.support.v4.app.NotificationCompat;import androID.support.v4.app.TaskStackBuilder;public class NotifyTest extends Activity { private static int nextCode = 1; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_notify_test); int notifyCode = nextCode++; Intent notintent = new Intent(this, NotifyTest.class); notintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_top | Intent.FLAG_ACTIVITY_SINGLE_top); TaskStackBuilder stkBuilder = TaskStackBuilder.create(this); stkBuilder.addParentStack(NotifyTest.class); stkBuilder.addNextIntent(notintent); NotificationCompat.Builder notBuilder = new NotificationCompat.Builder(this) .setSmallicon(R.drawable.ic_launcher) .setContentTitle("NotifyTest") .setContentText("notification #" + notifyCode) .setContentIntent(stkBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)); notificationmanager manager = (notificationmanager)getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(notifyCode, notBuilder.build()); }}
AndroIDManifest.xml中:
<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID" package="com.example.notifytest" androID:versionCode="1" androID:versionname="1.0" > <uses-sdk androID:minSdkVersion="4" androID:targetSdkVersion="18" /> <application androID:allowBackup="true" androID:icon="@drawable/ic_launcher" androID:label="@string/app_name" androID:theme="@style/Apptheme" > <activity androID:name="com.example.notifytest.NotifyTest" 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> </application></manifest>
我已经验证这在将3.0之前的每个版本模拟回1.6时,以及在运行Froyo的真实设备上都有效.单击通知时,不会再次调用onCreate,因此会选择正在运行的活动而不会发出新通知.
在模拟3.0版本的每个版本时,以及在运行Jelly Bean的真实设备上,它都不起作用.选择通知会导致调用onDestroy和onCreate,并且每次您都会看到添加到抽屉的新通知.
请注意:我对防止重新启动活动非常感兴趣 – 即额外调用onCreate和onDestroy – 而不仅仅是抽屉中的多个通知.多次通知(由多次调用onCreate引起)只是演示实际问题的简单方法,即重新启动的活动.
在此先感谢您对此的任何帮助!
解决方法:
我有同样的问题.我的问题出现在API 22/23仿真器/设备上,并构建到API 17 /版本4.2构建的目标,因此在您请求3.0之后,更改清单对我来说非常容易.它正在添加产生差异的“singleTask”.
<activity androID:name=".MainActivity" androID:launchMode="singleTask"> <intent-filter> <action androID:name="androID.intent.action.MAIN" /> <category androID:name="androID.intent.category.LAUNCHER" /> </intent-filter> </activity>
总结 以上是内存溢出为你收集整理的单击Android通知会创建一个新活动,而不是转到现有活动全部内容,希望文章能够帮你解决单击Android通知会创建一个新活动,而不是转到现有活动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)