Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在应用程序关闭后,如何控制在android中启动后台进程的对象?_Android_Alarmmanager_Background Process - Fatal编程技术网

在应用程序关闭后,如何控制在android中启动后台进程的对象?

在应用程序关闭后,如何控制在android中启动后台进程的对象?,android,alarmmanager,background-process,Android,Alarmmanager,Background Process,我使用AlarmManager来安排定期的后台任务。当警报被触发时,Android系统会广播一个未决的意图。receiver类只是每隔10秒重复显示一次toast。我已在StartArm方法中创建了意图,并在cancelAlarm方法中创建了取消。 我的问题是:当我在创建报警后关闭应用程序时,toast会持续显示,而当我重新打开应用程序时,我会失去对创建后台任务的对象的控制,因此我无法取消它。帮忙 以下是控制报警的方法: public void startAlarm(Context contex

我使用AlarmManager来安排定期的后台任务。当警报被触发时,Android系统会广播一个未决的意图。receiver类只是每隔10秒重复显示一次toast。我已在StartArm方法中创建了意图,并在cancelAlarm方法中创建了取消。 我的问题是:当我在创建报警后关闭应用程序时,toast会持续显示,而当我重新打开应用程序时,我会失去对创建后台任务的对象的控制,因此我无法取消它。帮忙

以下是控制报警的方法:

public void startAlarm(Context context)
{
    ser=(AlarmManager)context.getSystemService(context.ALARM_SERVICE);
    Intent serviceIntent = new Intent(context, AlarmReceiver.class);
    pi=PendingIntent.getBroadcast(context, 0, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.SECOND, 10);
    ser.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), REPEAT_TIME, pi);
}
public void cancelAlarm(Context context)
{
    if (ser != null) 
    {
        ser.cancel(pi);
        ser=null;
        Toast.makeText(context, "Alarm Canceled", Toast.LENGTH_SHORT).show();
    }
}
以下是警报的接收器类别:

public class AlarmReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context arg0, Intent arg1)
    {
    Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show();
    }
}

对于后台服务的控制,您可以使用

Process.killProcess(int pid)
ActivityManager.killBackgroundProcesses(String packageName)
或强制关闭

       Intent intent = new Intent(yourCurrentActivity.this,yourNextActivity.class);  
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
       startActivity(intent);  
       android.os.Process.killProcess(android.os.Process.myPid());
或者对于报警管理器,您可以使用代码取消报警。 根据您的应用程序,您可能希望包括取消报警的功能。要取消报警,请在报警管理器上调用cancel(),传入您不想再触发的挂起帐篷。例如:

   //If the alarm has been set, cancel it.
   if (alarmMgr!= null) {
     alarmMgr.cancel(alarmIntent);
   }

您可以通过以下方式强制关闭服务“我对创建后台任务的对象失去控制,因此无法取消”是什么意思?你到底想要什么?