谁知道怎么让一个android程序在进程中只启动一个?

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

22 个解决方案

#1


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

#2


引用 1 楼  的回复:
还是看看launch mode,可以解决的

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

#3


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

#4


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

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

#5


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

#6


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

#7


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

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

#8


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

#9


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

我的是个视频播放的应用,那样恐怕不合适。

#10


其实你可以在碰到热键的时候加个提示,是否退出
这样就不会一下子关闭掉了
酷狗就是这样做的

#11


引用 10 楼  的回复:
其实你可以在碰到热键的时候加个提示,是否退出
这样就不会一下子关闭掉了
酷狗就是这样做的

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

#12


引用 7 楼  的回复:
引用 6 楼  的回复:

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

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



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

#13


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

#14


引用 13 楼  的回复:
然后判断一下instance of.如果true,则什么都不做.否则....

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

#15



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

#16


引用 15 楼  的回复:
Java code

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == event.KEYCODE_BACK) {
            getWindow().setTitle("BACK");
            return fa……

对于系统热键的检测这个方法是不行的。

#17


我试的咋行呢

#18


引用 17 楼  的回复:
我试的咋行呢

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

#19


楼主把那段代码粘过去试了?

#20


引用 19 楼  的回复:
楼主把那段代码粘过去试了?

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

#21


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

#22


我也想知道这个

#1


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

#2


引用 1 楼  的回复:
还是看看launch mode,可以解决的

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

#3


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

#4


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

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

#5


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

#6


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

#7


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

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

#8


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

#9


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

我的是个视频播放的应用,那样恐怕不合适。

#10


其实你可以在碰到热键的时候加个提示,是否退出
这样就不会一下子关闭掉了
酷狗就是这样做的

#11


引用 10 楼  的回复:
其实你可以在碰到热键的时候加个提示,是否退出
这样就不会一下子关闭掉了
酷狗就是这样做的

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

#12


引用 7 楼  的回复:
引用 6 楼  的回复:

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

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



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

#13


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

#14


引用 13 楼  的回复:
然后判断一下instance of.如果true,则什么都不做.否则....

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

#15



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

#16


引用 15 楼  的回复:
Java code

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == event.KEYCODE_BACK) {
            getWindow().setTitle("BACK");
            return fa……

对于系统热键的检测这个方法是不行的。

#17


我试的咋行呢

#18


引用 17 楼  的回复:
我试的咋行呢

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

#19


楼主把那段代码粘过去试了?

#20


引用 19 楼  的回复:
楼主把那段代码粘过去试了?

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

#21


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

#22


我也想知道这个