2011-06-29 117 views
11

我的Android应用程序有一个WebView需要Flash插件。如果没有安装,webview将提供市场链接到Adobe Flash。安装Flash之后,在我的应用程序中实例化它的唯一方法是强制退出并重新启动应用程序。我想向用户展示一个按钮,为他们提供这个按钮,因为对于临时用户来说,打开正在运行的进程并强制手动退出应用程序太复杂了。什么是Java代码来实现这样的重启按钮?如何强制退出Android应用程序并重新启动?

+3

到底为什么你需要强制退出并重新启动你的应用程序来初始化事物?在安装Flash后再次调用初始化代码.. –

+1

您是否真的需要强制关闭应用程序本身?不仅要关闭托管WebView的活动就足够了吗? – Squonk

+1

抛出异常:P –

回答

27

您可以重新启动您的应用程序分两步:

  1. 杀死你自己的过程。使用 Process.myPid(),将它传递到 Process.killProcess()。您可能需要向清单中添加权限(可能为android.permission.KILL_BACKGROUND_PROCESSES)以使其起作用。
  2. 在你杀死你自己的进程之前,注册一个具有待决意图的报警,以在不久的将来重新开始你的活动。 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

如何从我的主'Activity'中访问这个'Process'对象? – JoJo

+0

Process上的这些方法是静态的。你应该能够打电话给他们。 – mportuesisf

+0

是的,这是有效的。在调用'Process.sendSignal(Process.myPid(),Process.SIGNAL_KILL)' – jtoberon

0

我想你可以拨打电话finish让你的活动停止,但你将无法让你的应用程序重新开始备份。这将需要(如果甚至可能的话)根,这将是一个可怕的想法。这意味着任何应用程序都可以在任何时候自行启动:这只是一个坏主意,如果可能的话,实际上会是一个错误。

+0

Activity.finish实际上是否强制退出应用程序?它似乎只是将应用程序存储在内存中。当我运行代码时,它确实关闭了应用程序。但是当我去管理应用程序时,“强制停止”按钮仍然被激活。如果应用程序无法在内存中找到,应该禁用该按钮。出于某种原因,Flash要求应用程序内存不足,然后重新启动以使其被“WebView”识别。 – JoJo

+0

@JoJo:Activity.finish只关闭当前活动。你完成了应用程序中的所有活动还是仅完成了一个?因为如果任何活动或后台进程仍然存在,那么应用程序自然也会存在。 –

+0

我在'Activity.onCreate'结尾添加了'this.finish()'。所以当你启动应用程序时,它会立即关闭。这不应该导致唯一的活动被关闭吗? – JoJo

-1

你可以用System.exit应用程序的退出(0):这并不需要许可,您的应用程序

相关问题