【发布时间】:2016-06-15 18:52:42
【问题描述】:
我正在使用AndroidAsync 在我的 Android 设备上托管服务器。我希望能够在 POST 请求时启动新应用程序,并在 DELETE 请求时终止该应用程序。但是,应用程序可能会自行完成,因此我希望能够在应用程序完成后获得结果。
这是我启动应用程序的方式:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.app.package");
startActivityForResult(intent, 100);
这是我尝试终止应用程序的方法:
Runtime.getRuntime().exec("am force-stop com.app.package");
这是我在另一个应用程序上的代码(被启动并杀死的那个):
public boolean kill;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
final Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK, returnIntent);
new Thread() {
public void run() {
try {
if (!kill) {
Process p = Runtime.getRuntime().exec("sleep 10");
p.waitFor();
}
} catch (Exception e) {
setResult(Activity.RESULT_CANCELED, returnIntent);
}
finish();
}
}.start();
}
@Override
public void onDestroy() {
super.onDestroy();
kill = true;
}
当我尝试终止应用程序时,什么也没有发生。
我不知道为什么这不起作用。我在想我必须root我的设备才能让“am force-stop”命令做任何事情,对吗?
编辑:
当我在应用程序运行时在 adb shell 中运行“am force-stop com.app.package”时,它会停止。为什么当我以编程方式执行时它不起作用?
【问题讨论】:
-
应该是
public volatile boolean kill;,因为你在一个线程中写入它并从另一个线程读取它。
标签: android android-intent android-activity kill