单击Android通知会创建一个新活动,而不是转到现有活动

单击Android通知会创建一个新活动,而不是转到现有活动,第1张

概述我的应用程序有一个运行活动,可以创建通知.选择通知后,不会转到正在运行的活动,而是销毁正在运行的活动并创建新活动–INANDROID3.0ANDHIGHER.我该如何防止这种情况?这个问题已经多次回答,通常在清单中指出标志FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP,以及launc

我的应用程序有一个运行活动,可以创建通知.选择通知后,不会转到正在运行的活动,而是销毁正在运行的活动并创建新活动 – 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通知会创建一个新活动,而不是转到现有活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存