Clearning Activity的意图数据会随机回来,为什么?

我有一个媒体应用程序,当意图被发送到玩家活动时,开始播放,具有以下意图附加function; 数据“path到音乐”并且键入“mime /audio格式”。

我在播放器活动中选取意图数据执行以开始播放,并从意图中移除所传递的附加内容,以避免在翻转屏幕或将活动带回前台之后再次发出相同的请求。

这是我如何处理意图:

final String data = getIntent().getDataString(); final String type = getIntent().getType(); // start playback requestPlay( data, type ); // remove intents because they are needed only once per call! this.getIntent().setDataAndType(Uri.parse(""), ""); this.getIntent().removeExtra("data"); this.getIntent().removeExtra("type"); 

我遇到的问题是随机且很less,我将打开应用程序,当它在玩家活动中恢复时,意图将包含之前的额外数据并开始玩…这对我和我的用户都很恼人。 ..

任何人有任何想法什么是最好的方式来清除意图数据? ActivityManager可能会保存这些数据的一些原因…?

谢谢!

-Jona

Solutions Collecting From Web of "Clearning Activity的意图数据会随机回来,为什么?"

我的解决scheme

 Bundle mExtrass = null; getIntent().replaceExtras(mExtrass); 

这清除了额外的数据。

对此不清楚,但你有没有试过意向标志FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET或FLAG_ACTIVITY_NEW_TASK?

当检索数据和typesstring时,尝试将它们作为额外的代替,而不是使用getDataString()getType()

 final String data = getIntent().getExtras().getString("music_path"); final String type = getIntent().getExtras().getString("data_type"); // start playback requestPlay( data, type ); // remove intents because they are needed only once per call! this.getIntent().setDataAndType(data, type); this.getIntent().removeExtra("music_path"); this.getIntent().removeExtra("data_type"); 

之前,你需要把这些types作为额外的:

 intent.putExtra("music_path", <path to music>); intent.putExtra("data_type", <mime/audio format); 

我遇到了同样的问题。 在我的情况下,问题是我有时在应用程序启动时有两个意图:一个在onCreate中,另一个在onNewIntent中。 来自onCreate的意图附加了一些真正的旧数据(应根据文档清除),而onNewIntent没有额外的数据(正确的情况)。

我的解决scheme是logging最后传入的意图(假设最后的意图是正确的),然后在onResume中处理意图,因为在onCreate和onNewIntent之后调用该方法。 喜欢这个:

 private Intent lastIntent; public void onCreate() { lastIntent = getIntent(); } public void onNewIntent(Intent intent) { lastIntent = intent; } public void onResume() { if (lastIntent != null) { // handle lastIntent and then set it to null lastIntent = null; } }