强制停止后,我的AlaramManager不起作用

时间:2012-10-08 00:03:35

标签: android broadcastreceiver

我正在尝试实现一个简单的服务,每小时将用户的当前位置发送到服务器。我的应用只需登录Activity并设置活动,通常在后台工作。我使用AlarmManager来实现我的目的并且效果很好但是当我被迫停止我的应用时,我的receiver不起作用。这是我的代码。

MyApplication.java

    @Override
    public void onCreate() {
      super.onCreate();
      startService();
    }

    private void startService(){
        Intent receiver = new Intent(this, LocationAlaramReceiver.class);
        PendingIntent intent = PendingIntent.getBroadcast(this, 0, receiver,  PendingIntent.FLAG_UPDATE_CURRENT);

       AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
       mgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), AlarmManager.INTERVAL_HOUR, intent);
    }

的AndroidManifest.xml

    <receiver
         android:name=".receiver.LocationAlarmReceiver">
    </receiver>

LocationAlarmReceiver.java

    public class LocationAlarmReceiver extends BroadcastReceiver 
     {
    private final static String TAG = "LocationAlarmReceiver";

        @Override
        public void onReceive(Context context, Intent intent) 
             {
          Log.d(TAG, "=========== onReceive ==============");
              //Do something later

             }
    }

看到我的情况,它看起来并不保证AlarmManager将始终被调用。我想让LocationAlramReceiver每小时工作一次。我该如何解决我的问题?

1 个答案:

答案 0 :(得分:0)

当用户强制停止您的应用程序时,Android(从3.1版开始)将其置于STOPPED STATE(此处更多http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html)。您的应用程序在STOPPED状态下不会收到任何广播。为了摆脱这种状态,您的应用程序必须由用户或其他应用程序显式启动。