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

解决方案 »

  1.   

    按HOME键后其实是没有Destroy的,但重新startActivity时会重新OnCreate,然后原来没有被Destroy的这时会被Destroy掉.我要的是不被Destroy
      

  2.   

    按HOME键之后,再回到应用时,如果进程已经被杀死会重新onCreat,没被杀死的话运行的是onResume,不会重新运行onCreate
      

  3.   

    系统在强制关闭你的activity时是不会调用onDestroy的,但是在重新恢复你的activity时是会调用onCreate(Bundle),这里的bundle是有数据的,而数据就是你在onSaveInstanceState中保存的,
    只要做好相关数据的保存和恢复就好了。
      

  4.   

    我大致理解你要的了,home走了之后,startActivity是你自己程序里面调用的吗?还是再次被launcher唤起的?
    第一种可以通过加一些flag来实现,要是第二个onNewInstance会调用吧?
      

  5.   

    通常你是没办法阻止系统强制结束你的程序的(楼上说的后台播放无声音乐的方法我没试过,也许可行),所以最好不要想着怎么阻止系统重新oncreate,而是针对onCreate中的bundle做好恢复工作。
      

  6.   

    对于本程序,屏蔽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键屏蔽 最小化
      

  7.   

    我说的音乐方法太hack了,最好不用,费电。
    我也同意在oncreate时候做好数据的恢复可能就减少启动时间
      

  8.   

    我调起来的地图按HOME是没有被OnDestroy的,但在我再次startActivity时会重新OnCreate,然后上一次未被OnDestroy的Activity会被OnDestroy掉,以上几楼的方法都无效.
      

  9.   

    lz为什么要“再次startActivity”?是不是哪里的逻辑有问题
      

  10.   

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

  11.   

    startActivity,这时可以再intent里面加入flag,有个一可以reorder Activity的,也许可以帮到你
      

  12.   

    FLAG_ACTIVITY_REORDER_TO_FRONT是不能达到要求的FLAG_ACTIVITY_NEW_TASK是可以让地图不重新OnCreate,但会让我的启动地图的APK的Activity不能弹到地图前面,而是被地图挡住了.
      

  13.   


    地图和启动地图的APK的Activity是什么关系?
      

  14.   

    启动地图的APK是我做的一个Lanucher
      

  15.   

    按home键后,activity 应该处于pause状态,如果没有finish或者被android kill掉的话,
    再次启动应该不会执行OnCreate。
    另外,8楼的方法我测试没有成功。
    重在参与!
      

  16.   

    我自己写的其它APK也正常,就是地图有这个问题
      

  17.   

    //--------------
    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,系统正常情况下是要这么走法(除非用什么特殊方式,但真的不建议这么弄,除非你要定制非通过版本的系统),
    看能不能换个思路,比如地图调用方式上做些改变.
      

  18.   

    按home键后,再进入应用应该不会走oncreate的,你是不是设计逻辑出了问题?你是不是本身把自己finish掉了呢?
      

  19.   

    >>>因为按HOME键后,程序转到后台了,不startActivity能显示到前台吗?首先,按HOME后回到launcher,再从launcher上面点击程序图标启动程序,是不是走oncreate的,这一点应该是没有问题吧。楼主想通过自己的代码再次启动你的程序,所以我建议楼主看看launcher是怎么启动程序的。它都能做到,你的也应该是能做到的。对了,为什么不能用"singleTask"?
      

  20.   

    oncreate只调用一次,重新唤醒不调用
      

  21.   

    launcher加了NEW_TASK属性,我的不能加,加了我的界面不能弹出到地图前面,可见:
    http://topic.csdn.net/u/20121018/12/7c3af197-b4f4-4b73-9e02-ecb510eeb476.html?seed=135934681&r=79926450#r_79926450
      

  22.   


            <activity
                android:name=".app.entry.BootActivity"
                android:label="@string/app_name"
                android:theme="@style/translucent"
                android:launchMode="singleTop" >
      

  23.   

    singleTop我早试过了,和NEW_TASK一样,会让我的Activity不能显示到地图之上.