前提1: 不准用android:launchMode="singleTask"
前提2: 不准用Intent.FLAG_ACTIVITY_NEW_TASK
问题: 按Home键隐藏了程序之后,再次调用程序时禁止Activity重新onCreate,而是直接显示出来.
解决者可以自己要求给多少分都行,只要在本人的可用分数内.
------最佳解决方案--------------------
按Home键隐藏了程序之后,按照原理你不能可能控制它不被系统杀掉(有办法提升自己不被杀几率),被杀了再唤起一定会走oncreat,这个应该是没有疑问的(据我了解)。
我给出的意见是,让activity尽量不被杀,似乎绑定一个后台service可以吧?或者最hack的办法就是一直播放没声音的音乐(ios5以上的后台进程就是这么实现的)。
不一定能百分百解决问题,希望给你个思路或者些许帮助吧
------其他解决方案--------------------
onSaveInstance()?
------其他解决方案--------------------
按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时候做好数据的恢复可能就减少启动时间
------其他解决方案--------------------
建议楼主去改框架实现
------其他解决方案--------------------
lz为什么要“再次startActivity”?是不是哪里的逻辑有问题
------其他解决方案--------------------
startActivity,这时可以再intent里面加入flag,有个一可以reorder Activity的,也许可以帮到你
------其他解决方案--------------------
地图和启动地图的APK的Activity是什么关系?
------其他解决方案--------------------
估计应用层很难实现了,mark下
------其他解决方案--------------------
按home键后,activity 应该处于pause状态,如果没有finish或者被android kill掉的话,
再次启动应该不会执行OnCreate。
另外,8楼的方法我测试没有成功。
重在参与!
------其他解决方案--------------------
//--------------
http://topic.csdn.net/u/20121018/12/7c3af197-b4f4-4b73-9e02-ecb510eeb476.html?48255
我自己写了一个Lanucher,这个Lanucher启动了地图,然后我这个Lanucher等30秒后会自动调用startActivity来启动Lanucher本身的一个activity,现这个被启动的activity不能显示在地图之上,有什么方法可以让它显示在地图之上.