现在有两个activity,一个启动时用,一个供用户操作。热键绑定的是启动时的那个。程序运行时我每次都容易不小心按到热键,然后程序重新启动一次。这样感觉很不好,什么方法可以让系统中次进程只运行一个,当程序运行时,再按热键也没用?
不是让activity在栈中只有一个啊。

解决方案 »

  1.   

    还是看看launch mode,可以解决的
      

  2.   

    android:launchMode="singleTop" 和android:launchMode="singleTask"和android:launchMode="singleInstance"都试了不行。
      

  3.   

    一个进程APK启动的话,总得有一个入口类吧,对这个类采用单件模式,禁止创建多个实例
      

  4.   

    我把launchMode改为singleTask,就是觉得该这样。可惜不行。
      

  5.   

    就没有办法阻止启动的那个activity出来吗?
      

  6.   

    我不知道你的热键是怎么检测的,不过我想可不可以在执行启动的时候做下过滤呢?判断下栈顶的Activity是不是你this.
      

  7.   

    这个应该是判断不了,我改了那个热键的值,把他直接绑定我的activity上来,不管什么情况下按下那个热键我的activity就启动。我想问问android就没提供什么保证一个activity在栈中只能有一个,同时别人去调他的时候不会把它栈上面的activity给销毁掉的东西?
      

  8.   

    做成QQ那样不行吗,当按热键时,把程序弄成Foreground形式的service,这样程序就不会被关闭了
    然后用户通过Foreground图标打开
    然后程序再加launchMode为singleTask试试
      

  9.   

    谢谢你帮忙,现在是碰到热键时直接就启动跟热键绑定的activity了,我尝试监听这个热键,可是在onkeydown()方法里监听不到,对于怎么在activity里监听系统热键我没研究过,能说一下方法吗?
      

  10.   

    应该是可以检查栈顶的Activity吧!貌似有个getCurrentActivity()方法来的.
      

  11.   

    然后判断一下instance of.如果true,则什么都不做.否则....
      

  12.   

    唉,这热键做的有利有弊啊。那个检查栈中activity的我能检测,现在这个热键跟HOME一样是系统热键,我在onkeydown里检测不到,你会检测系统热键不?
      

  13.   


        @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == event.KEYCODE_BACK) {
    getWindow().setTitle("BACK");
    return false;
    } else {
    return super.dispatchKeyEvent(event);
    }
    }
      

  14.   

    真的,像返回键,音量加减这种热键,跟HOME键和发邮件热键还有我说的那个,这类按下直接连到另一个apk的热键监听不一样。
      

  15.   

    嗯,如我18楼回你的,你代码中的只是监听了返回键,那样可以。可是返回键、音量加减这类热键的监听方法和HOME键,邮件发送热键这类热键的监听是不一样的。你如果可以用那个方法监听到HOME的这类热键,说明你程序中肯定加了别的什么代码,而你没贴出来。
      

  16.   

    不知道你说的热键是指手机下面的几个功能键吗?
    硬件功能键,首页\返回\音量调节键?
    我刚才试了,首页的那个监听不到android开发站上写这个键消息是不会发送到程序级,只到framework级
    返回和音量调节我试了是可以监听的