当前位置: 代码迷 >> Android >> 100分 怎么禁止Activity重新onCreate
  详细解决方案

100分 怎么禁止Activity重新onCreate

热度:52   发布时间:2016-05-01 12:17:29.0
100分 怎样禁止Activity重新onCreate
前提1: 不准用android:launchMode="singleTask"
前提2: 不准用Intent.FLAG_ACTIVITY_NEW_TASK
问题: 按Home键隐藏了程序之后,再次调用程序时禁止Activity重新onCreate,而是直接显示出来.
解决者可以自己要求给多少分都行,只要在本人的可用分数内.
------解决方案--------------------
onSaveInstance()?
------解决方案--------------------
按Home键隐藏了程序之后,按照原理你不能可能控制它不被系统杀掉(有办法提升自己不被杀几率),被杀了再唤起一定会走oncreat,这个应该是没有疑问的(据我了解)。
我给出的意见是,让activity尽量不被杀,似乎绑定一个后台service可以吧?或者最hack的办法就是一直播放没声音的音乐(ios5以上的后台进程就是这么实现的)。
不一定能百分百解决问题,希望给你个思路或者些许帮助吧
------解决方案--------------------
按HOME键之后,再回到应用时,如果进程已经被杀死会重新onCreat,没被杀死的话运行的是onResume,不会重新运行onCreate
------解决方案--------------------
系统在强制关闭你的activity时是不会调用onDestroy的,但是在重新恢复你的activity时是会调用onCreate(Bundle),这里的bundle是有数据的,而数据就是你在onSaveInstanceState中保存的,
只要做好相关数据的保存和恢复就好了。
------解决方案--------------------
我大致理解你要的了,home走了之后,startActivity是你自己程序里面调用的吗?还是再次被launcher唤起的?
第一种可以通过加一些flag来实现,要是第二个onNewInstance会调用吧?
------解决方案--------------------
通常你是没办法阻止系统强制结束你的程序的(楼上说的后台播放无声音乐的方法我没试过,也许可行),所以最好不要想着怎么阻止系统重新oncreate,而是针对onCreate中的bundle做好恢复工作。
------解决方案--------------------
对于本程序,屏蔽Home键,最小化activity,看看以下代码

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{

if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_HOME)

{

// 最小化应用

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.addCategory(Intent.CATEGORY_HOME);

startActivity(intent);

return true;

}

return super.onKeyDown(keyCode, event);

}

当然屏蔽Home还要onAttachedToWindow及加android.permission.DISABLE_KEYGUARD
具体事例查,android home键屏蔽 最小化
------解决方案--------------------
我说的音乐方法太hack了,最好不用,费电。
我也同意在oncreate时候做好数据的恢复可能就减少启动时间
  相关解决方案