【Android解决方案】在onResume里调用getIntent()得到的是上一次数据

我有四个媒体分类(Record,Music,Video,Picture),里面除了数据不同,界面都是相似的,所以我把它们用一个MediaActivity装载,按下不同按钮后调用startActivity(intent),通过传入不同的intentExtra值来区分初始化哪一种数据。

【Android解决方案】在onResume里调用getIntent()得到的是上一次数据_第1张图片

问题来了:当我进入(比如说)“录像”后,“录像”数据初始化成功了,然后按Home键退出,再进入“音乐”,里面的数据还是“录像”的。

这是因为Home键使得MediaActivity放到后台运行了,再次调用startActivity(intent)生命周期是从onResume()开始的,而在onResume()里得到的intent数据并不是最新的。

解决办法参考:《How to make notification intent resume rather than making a new intent?》

startActivity(intent)之前,加上

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

先清除堆顶的MediaActivity,然后再以singleTop的启动模式打开,这样生命周期就从onCreate()开始调用。


插曲1:Activity不能直接监听Home键

本来我想直接监听Home键把MediaActivityfinish掉,结果发现直接在onKeyDown()里面并监听不到,要用广播来监听(-。-好麻烦~)

有需要的参考《Android Back Home键监听_广播监听》


插曲2:有类似的问题答复说onNewIntent()方法有效

看到帖子《在onResume()中调用getIntent()得不到Extra的问题,求高手解答!!!》里面倒数第二楼有人答复了一种方案,倒数第一楼的人说可行,可是我试了不行,也贴出来没准以后有用呢。

这么老的帖子都被搜到了,不知道LZ解决了没,我遇到和这一样的问题,解决方法是添加这个函数就ok了,


    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);// must store the new intent unless getIntent() will return the old one
    }
希望搜到这个帖子的后来者能获得这种解决方法

你可能感兴趣的:(*,Android,*,错误解决方案)