【问题标题】:How to have control on the object that started a background process in android, after the application is closed?关闭应用程序后,如何控制在android中启动后台进程的对象?
【发布时间】:2015-05-09 12:21:09
【问题描述】:

我使用 AlarmManager 来安排重复的后台任务。当触发警报时,Android 系统会广播一个 Pending Intent。接收器类只是重复显示一个 toast,每 10 秒一次。我在 startAlarm 方法中创建了意图,并在 cancelAlarm 方法中取消。 我的问题是:当我在创建警报后关闭应用程序时,吐司不断显示,当我重新打开应用程序时,我失去了对创建后台任务的对象的控制,所以我无法取消它。帮忙?

以下是控制警报的方法:

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();
    }
}

【问题讨论】:

  • “我失去了对创建后台任务的对象的控制,所以我无法取消它”是什么意思?你到底想要什么?

标签: android alarmmanager background-process


【解决方案1】:

为了控制后台服务,你可以使用

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(),传入您不再想触发的 PendingIntent。例如:

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

【讨论】:

  • 你可以通过强制关闭你的服务
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多