我创建了一个应用程序,在后台将位置提要发送到服务器,我需要一个按钮(控件)来强制停止应用程序或终止后台进程。 我该如何实现呢?
在后台功能中只使用不是服务
public class SendRequest extends AsyncTask<String, Void, String> {
protected String doInBackground(String... arg0) {
try {
URL url = new URL(GlobalVariables.URL_REGISTRATION_AND_UPDATION);
//convert string to jsonoblects
JSONObject postDataParams = new JSONObject();
//add the strings needed to send("first part is for string name","second part for content")
postDataParams.put(GlobalVariables.PARAM_LATTITUDE, latitude);
postDataParams.put(GlobalVariables.PARAM_LONGITUDE, longitude);
}
}
答案 0 :(得分:0)
取消AsyncTask
你有一个执行非常长时间操作的“一行命令”,你无能为力。
最好的解决方法是使用自己的cancelFlag布尔值。然后,您可以在postExecute中测试此cancelFlag,以决定如何处理结果。
要停止后台服务,请调用此方法
mContext.stopService(new Intent(mContext, MyBackgroundService.class))
要停止应用,您可以使用finishAffinity方法,该方法似乎非常接近通过其名称和javadoc描述关闭所有相关活动:
this.finishAffinity();
完成此活动以及当前任务中具有相同亲缘关系的紧接其下的所有活动。这通常在应用程序可以启动到另一个任务时使用(例如从它理解的内容类型的ACTION_VIEW),并且用户已经使用向上导航切换出当前任务并进入其自己的任务。在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动作为任务切换的一部分从原始任务中删除。
请注意,此结尾不允许您将结果传递给上一个活动,如果您尝试这样做,则会抛出异常。
如果你真的想强制停止你的应用,就像在设备的应用信息中使用这个,取自here:
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
os.writeBytes("adb shell" + "\n");
os.flush();
os.writeBytes("am force-stop com.YOUR.PACKAGENAME" + "\n");
os.flush();
答案 1 :(得分:0)
android.os.Process.killProcess(android.os.Process.myPid());