首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

100分 怎的禁止Activity重新onCreate

2012-12-17 
100分 怎样禁止Activity重新onCreate前提1: 不准用android:launchModesingleTask前提2: 不准用Intent.F

100分 怎样禁止Activity重新onCreate
前提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的,也许可以帮到你
[其他解释]
引用:
引用:
startActivity,这时可以再intent里面加入flag,有个一可以reorder Activity的,也许可以帮到你

FLAG_ACTIVITY_REORDER_TO_FRONT是不能达到要求的FLAG_ACTIVITY_NEW_TASK是可以让地图不重新OnCreate,但会让我的启动地图的APK的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不能显示在地图之上,有什么方法可以让它显示在地图之上.


注意:地图使用了android:launchMode="singleTask"以保证只启动一次.
//------------------

楼主的这个问题跟上面的问题,本质上应该是同一个问题吧,会重新调用oncreate,系统正常情况下是要这么走法(除非用什么特殊方式,但真的不建议这么弄,除非你要定制非通过版本的系统),
看能不能换个思路,比如地图调用方式上做些改变.
[其他解释]
按home键后,再进入应用应该不会走oncreate的,你是不是设计逻辑出了问题?你是不是本身把自己finish掉了呢?
[其他解释]
>>>因为按HOME键后,程序转到后台了,不startActivity能显示到前台吗?

首先,按HOME后回到launcher,再从launcher上面点击程序图标启动程序,是不是走oncreate的,这一点应该是没有问题吧。

楼主想通过自己的代码再次启动你的程序,所以我建议楼主看看launcher是怎么启动程序的。它都能做到,你的也应该是能做到的。

对了,为什么不能用"singleTask"?
[其他解释]

        <activity
            android:name=".app.entry.BootActivity"
            android:label="@string/app_name"
            android:theme="@style/translucent"
            android:launchMode="singleTop" >
[其他解释]

引用:
按Home键隐藏了程序之后,按照原理你不能可能控制它不被系统杀掉(有办法提升自己不被杀几率),被杀了再唤起一定会走oncreat,这个应该是没有疑问的(据我了解)。
我给出的意见是,让activity尽量不被杀,似乎绑定一个后台service可以吧?或者最hack的办法就是一直播放没声音的音乐(ios5以上的后台进程就是这么实现的)。
不一定能百分百解决问题,希望给你个思路或者些许帮助吧

按HOME键后其实是没有Destroy的,但重新startActivity时会重新OnCreate,然后原来没有被Destroy的这时会被Destroy掉.我要的是不被Destroy
[其他解释]
引用:
按HOME键之后,再回到应用时,如果进程已经被杀死会重新onCreat,没被杀死的话运行的是onResume,不会重新运行onCreate

我调起来的地图按HOME是没有被OnDestroy的,但在我再次startActivity时会重新OnCreate,然后上一次未被OnDestroy的Activity会被OnDestroy掉,以上几楼的方法都无效.
[其他解释]
引用:
lz为什么要“再次startActivity”?是不是哪里的逻辑有问题

因为按HOME键后,程序转到后台了,不startActivity能显示到前台吗?
[其他解释]
引用:
startActivity,这时可以再intent里面加入flag,有个一可以reorder Activity的,也许可以帮到你

FLAG_ACTIVITY_REORDER_TO_FRONT是不能达到要求的FLAG_ACTIVITY_NEW_TASK是可以让地图不重新OnCreate,但会让我的启动地图的APK的Activity不能弹到地图前面,而是被地图挡住了.
[其他解释]
引用:
引用:
引用:
startActivity,这时可以再intent里面加入flag,有个一可以reorder Activity的,也许可以帮到你

FLAG_ACTIVITY_REORDER_TO_FRONT是不能达到要求的FLAG_ACTIVITY_NEW_TASK是可以让地图不重新OnCreate,但会让我的启动地图的APK的Activity不能弹到……

启动地图的APK是我做的一个Lanucher
[其他解释]
引用:
按home键后,activity 应该处于pause状态,如果没有finish或者被android kill掉的话,
再次启动应该不会执行OnCreate。
另外,8楼的方法我测试没有成功。
重在参与!

我自己写的其它APK也正常,就是地图有这个问题
[其他解释]
引用:
估计应用层很难实现了,mark下

应用层应该可以实现吧,这么简单的功能都不行吗?
[其他解释]
该回复于2012-10-24 13:08:22被版主删除
------其他解决方案--------------------


oncreate只调用一次,重新唤醒不调用
[其他解释]
该回复于2012-10-25 11:31:37被版主删除
[其他解释]

引用:
>>>因为按HOME键后,程序转到后台了,不startActivity能显示到前台吗?

首先,按HOME后回到launcher,再从launcher上面点击程序图标启动程序,是不是走oncreate的,这一点应该是没有问题吧。

楼主想通过自己的代码再次启动你的程序,所以我建议楼主看看launcher是怎么启动程序的。它都能做到,你的也应该是能做到的。

对了,为什么不能用"sing……

launcher加了NEW_TASK属性,我的不能加,加了我的界面不能弹出到地图前面,可见:
http://topic.csdn.net/u/20121018/12/7c3af197-b4f4-4b73-9e02-ecb510eeb476.html?seed=135934681&r=79926450#r_79926450
[其他解释]
引用:
  <activity
  android:name=".app.entry.BootActivity"
  android:label="@string/app_name"
  android:theme="@style/translucent"
  android:launchMode="singleTop" >

singleTop我早试过了,和NEW_TASK一样,会让我的Activity不能显示到地图之上.
[其他解释]
就像一个跷跷板,没人能搞定啊

热点排行