在桌面长按HOME的话,HTC的手机会显示最近用过的程序列表,不建议修改。
如果是在你自己的应用中处理长按的话倒是可以,直接运行应用就行了,系统会帮你判断该应用是否启动,若启动则resume,否则就去start。PS:但是拦截HOME这个是不通用的,也就是说不是所有手机都能拦截到HOME,因为很多厂商都把home按键事件拦截了...

解决方案 »

  1.   


    怎么控制一个APK去RESUME或者START?怎么写代码实现这个?
      

  2.   

    首先搞清楚你是要控制一个apk文件还是说已经安装到手机中的程序...
      

  3.   

    home/menu/power等按键,都在phoneWindowManager中处理了的,用户得不到
      

  4.   

    android单实例运行方法http://www.mureal.com/androidfaq/12.html
     我们都知道Android平台没有任务管理器,而内部App维护者一个Activity history stack来实现窗口显示和销毁,对于常规从快捷方式运行来看都是startActivity可能会使用FLAG_ACTIVITY_NEW_TASK标记来打开一个新窗口,比如Launcher,所以考虑单任务的实现方法比较简单,首先Android123纠正下大家一种错误的方法就是直接在androidmanifest.xml的application节点中加入android:launchMode="singleInstance"这句,其实这样将不会起到任何作用,Apps内部维护的历史栈作用于Activity,我们必须在activity节点中加入android:launchMode="singleInstance" 这句才能保证单实例,当然一般均加在主程序启动窗口的Activity。
      

  5.   

    虽然每次恢复运行会进入OnCreate( )但带进来的saveInstanceState参数是不一样的,通过判断这个saveInstanceState参数我们可以知道是不是第1次运行还是简单的直接恢复运行。//【eoeAndroid特刊】第五期 Android widget.pdf中提到了
    7.3 首先,我们来说1——如何动态更新当前显示的Activity
    如果是传统的开发,或许您会说那很简单,把每个屏幕上元素的字符都重设一遍就好了。是的,
    这么做是很简单,但我不得不说,它的工作量和维护成本实在是不可预知的;而且,除了字符,
    在其它方面,如layout、drawable 等,都可能受Locale 影响。所以,我们需要一种更通用、
    更简洁的方法。
    应该注意,下面我介绍的方法,是即使在Google 的android 讨论组里也搜不到的。那么这个
    方法是什么呢?那就是重新启动一个Activity。
    或许您会觉得这个方法消耗过大,但如果您想到,其实android 屏幕方向改变都能导致Activity
    重起也就释然了。而且,这个方法我其实借用了一个假设,那就是大家都已经了解、考虑并且为
    了Activity 的生命周期做出了一定的努力, 已经良好的实现了
    onRestoreInstanceState(savedInstanceState) 和onSaveInstanceState(bundle)。当
    然,如果您的应用根本不担心生命周期,那么你就更没问题了。但如果您的应用在生命周期这一
    问题上,还有问题,那很遗憾,您最好还是先把生命周期这个严重的问题搞好吧。下面我们就来
    看代码,实现方法如下。
    首先,在用户改变语言区域后,调用如下代码
    Locale locale = getLocaleFormPreference(this);
    Configuration cfg = getResources().getConfiguration();
    if(locale!=null && !locale.equals(cfg.locale)) {
    Bundle bundle = new Bundle();
    onSaveInstanceState(bundle);
    Intent intent = getIntent();
    intent.putExtra("InstanceState", bundle);
    intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
    startActivity(intent);
    finish();
    }
    之后,在被启动的Activity 的onCreate(Bundle savedInstanceState)的最后位置运行下面
    的代码:
    if(savedInstanceState == null) {
    savedInstanceState =
    getIntent().getBundleExtra("InstanceState");
    if(savedInstanceState != null) {
    onRestoreInstanceState(savedInstanceState);
    }
    }
    下面,我再为大家一行一行的,讲解一下这两段代码:
    • 首先,我们在第1 段代码的前4 行对Locale 进行了一下判断,使得只在Locale 发生
    变化的情况下,才重起Activity。
    • 之后,5~8 行,我们手动调了的onSaveInstanceState(bundle)方法,获得了恢复
    Activity 所需要的信息,并以"InstanceState"为Key 存入了Intent。
    • 第9 行,我们为Intent 添加了一个flag——FLAG_ACTIVITY_FORWARD_RESULT。
    这一步,是可选的,目的是如果当前的Activity 需要给启动它的Activity 一个回复的
    code 时,由它新启动的Activity 来回复。
    • 最后10~11 行是启动新的Activity 并终止当前的。
    • 而第2 段代码则是通过判断savedInstanceState 来选择和模拟系统restart 一个
    Activity 的过程。因为默认新启动Activity 时,savedInstanceState 是空的,而重启
    动时savedInstanceState 会带有信息,因此我们可以这样去模拟。
    这里,同样有两点需要注意:
    1. 这段代码需要在根Activity 上执行,如果您应用了ActivityGroup 并需要在child 上执
    行更新操作。请相应更改第一段代码的第6、7 行,调用根Activity 上的方法。而第2
    段代码,仍然放在根Activity 的onCreate(Bundle savedInstanceState)里。
    2. 如果您处理生命周期的操作,除了在onRestoreInstanceState()里,其他地方,也有
    操作,请自行想办法,按照您需要的顺序模拟restart 操作。