Android的活动意图仍然关机后(Android Activity Intent remains

2019-07-30 16:15发布

SETUP一个活动,SingleTop,从通知接收意图。 目的是通过活动消耗。 用户点击后退按钮结束活动。 onDestory被调用和isFinishing()返回true。 长按Home键调出最近使用的应用。 启动先前关闭的应用程序。

类似的情况发生与onNewIntent当用户在活动按下home键后的onStop被调用。

问题一旦它完成后,该活动的娱乐,是用来从该通知的目的相同。 我不想这样。 有没有办法告诉我们已经消耗的通知,以便阻止它给人以活动的系统? 解决? 建议?

我曾尝试

  1. 我试图从意图删除临时演员。 不工作。 Clearning活动的意图数据随机回来了,为什么呢?
  2. 我试图saveInstanceState()保持时间戳的意图。 然而onIstanceState(束)被删除(在空的onCreate)活动时被破坏。
  3. 我试图意图,活动设置为空,但不工作

这个问题很类似这样的: http://grokbase.com/t/gg/android-developers/119jyzf492/getintent-removeextra-in-activity-doesnt-work-for-android-launchmode-"singletask”

Answer 1:

这是一个变通 - 而不是IMO的解决方案。

问题

请记住,问题的onCreate()和onNewIntent()不停地给该活动的目的相同不管什么(什么也没有粘)。 最坏的罪犯的onCreate(),因为捆绑savedInstanceState总是空。

补救措施

我创建了一个序列化(让呼叫sFOO)类持有意图额外意图的行动和时间戳。 期间的onCreate()我加载这个序列化的类(sFOO)。 调用onStart期间()I比较sFOO到意图被处理。 如果一切都是新的,我知道的意图需要处理和sFoo更新,然后保存。 如果没有,我不顾意图。

你需要的代码?

在调用onStart()

Intent activityIntent = this.getIntent();       
    if (activityIntent != null)
    {                         
        if (activityIntent.getAction() != null)
        {                       
            boolean newIntent = false;

            //Is the intent action being processes same as previous? 
            if (activityIntent.getAction().compareTo(this.mLastProcessedIntent.mLastIntentProcessedAction) == 0)
            {
                if (activityIntent.getExtras() != null)
                {
                    //Is the intent time stamp being processed same as previous?
                    if (activityIntent.getExtras().getLong(TIME_STAMP_KEY) != this.mLastProcessedIntent.mLastIntentProcessedTimestamp)
                    {                           
                        newIntent = true;                                                       
                    }
                }
            }
            else
            {
                Log.d(TAG,"Last processed intent action does not equal new one.");
                newIntent = true;
            }

            if (newIntent)
            {
                 updateAndSaveProcessedIntent();
                 /*YOUR CODE HERE TO HANDLE INTENT*/
            }

        }
    }


Answer 2:

这听起来像你正在使用开始你的活动可能已播出的“粘性”意图的意图。 置顶意图使甚至其被消耗后可用的意图。 如果是这样的话你的应用程序将获得那是以前使用相同的意向。 如果你可以检查无论是广播业的意图,看它是否是一个棘手的意图或没有。 你会在清单中看到这一点:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

它会用这种方法来发送:

sendStickyBroadcast(intent);

如果你没有更改(如果它不是你的应用程序调用它)的能力,那么你很可能将不得不找到一种方法来对付它适合于您的应用程序。 这是没有看到任何代码仅仅是一种可能性。



Answer 3:

我的解决办法是先改变我的活动到android:launchMode="singleTop"然后使用onNewIntent

@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }



文章来源: Android Activity Intent remains after shutdown