Java 如何强制退出Android应用程序并重新启动它?
我的Android应用程序有一个需要Flash插件的Java 如何强制退出Android应用程序并重新启动它?,java,android,Java,Android,我的Android应用程序有一个需要Flash插件的WebView。如果未安装Adobe Flash,webview将提供市场链接。安装Flash后,在我的应用程序中实例化它的唯一方法是强制退出并重新启动应用程序。我想向用户展示一个按钮,为他们执行此操作,因为对于临时用户来说,打开其运行过程并手动强制退出应用程序太复杂了。实现这样一个重启按钮的Java代码是什么?我想您可以调用以停止活动,但您将无法使应用程序重新启动。这将需要(如果可能的话)根,这将是一个可怕的想法。这意味着任何应用程序都可以随
WebView
。如果未安装Adobe Flash,webview将提供市场链接。安装Flash后,在我的应用程序中实例化它的唯一方法是强制退出并重新启动应用程序。我想向用户展示一个按钮,为他们执行此操作,因为对于临时用户来说,打开其运行过程并手动强制退出应用程序太复杂了。实现这样一个重启按钮的Java代码是什么?我想您可以调用以停止活动,但您将无法使应用程序重新启动。这将需要(如果可能的话)根,这将是一个可怕的想法。这意味着任何应用程序都可以随时启动:这是一个坏主意,如果可能的话,实际上是一个bug。您可以通过两个步骤重新启动应用程序:
Process.myPid()
,将其传递到
Process.killProcess()
。您可能需要向清单中添加权限(可能是android.permission.KILL\u BACKGROUND\u processs
)才能使其正常工作alarm.set
的第二个参数是triggerAtTime
。将其设置为0会立即触发警报。这里的示例设置了在未来一秒钟内启动应用程序的时间AlarmManager alm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alm.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()), 0));
您可以使用系统退出应用程序。退出(0):这不需要您的应用程序的权限为什么您需要强制退出并重新启动应用程序来初始化?安装flash后,只需再次调用初始化代码。您真的需要强制关闭应用程序本身吗?关闭承载WebView的活动就足够了吗?如果应用程序没有重新启动,WebView的Javascript将无法找到Flash。我可以随心所欲地重新启动WebView并重置其插件,但在应用程序重新启动之前,它不会启动Flash。我发现在Android 4.3下将网页重新加载到WebView后,javascript间歇性不运行会出现类似问题。这个问题在4.4中消失了,可能是因为谷歌用chrome取代了WebView的核心。我已经寻找了好几个星期的解决方法--我会尝试一下--有时需要一两天时间才能出现问题。
Activity.finish
确实强制退出了应用程序吗?它似乎只将应用程序存储在内存中。当我运行代码时,它确实关闭了应用程序。但当我去管理应用程序时,“强制停止”按钮仍然处于激活状态。如果应用程序在内存中找不到位置,则应禁用该按钮。出于某些原因,Flash要求应用程序内存不足,然后重新启动,以便WebView
@JoJo:Activity.finish仅关闭当前活动。你是完成了应用程序中的所有活动还是只完成了一项?因为如果任何活动或后台进程仍然存在,那么应用程序自然也会存在。我在Activity.onCreate
的末尾添加了this.finish()
。因此,当你启动应用程序时,它会立即关闭。这不应该导致唯一的活动被关闭吗?@JoJo:是的,应该可以。我不知道为什么它不关闭没有活动的应用程序。你使用的是什么版本的Android?我在2.2上看到了类似的行为(摩托罗拉Droid(1))。调用finish()将退出活动,但它仍然显示在“正在运行的应用程序”下。此外,“强制停止”按钮似乎没有任何作用。如何从我的主活动中访问此进程
对象?进程上的这些方法是静态的。你应该可以打电话给他们。是的,这很有效。我们有一个管理按钮,在调用Process.sendSignal(Process.myPid(),Process.SIGNAL\u KILL)
@mportuesisf之前,它可以完全关闭各种事情。现在我有了一个alarm.set()
,后面跟着一个Process.killProcess()
。进程终止后如何触发报警?我已将0
替换为System.currentTimeMillis()+1000
,但我没有看到活动在1秒后重新启动。可能当进程被终止时,它的所有报警也会被清除。请尝试将常量AlarmManager.REALTIME
更改为AlarmManager.RTC
RTC
是以UTC为单位的挂钟时间,Expressed\u REALTIME
是自启动以来的时间。(您可能还需要将时区调整为UTC)。