Android服务自动停止

时间:2015-06-29 05:34:13

标签: android android-activity android-service

我正在制作一个具有警报功能的应用程序。我正在使用此服务,它会根据我的数据库中的时间检查设备的当前时间。

我的问题是,如果应用从后台删除或设备为service,则此rebooted会停止。我已使用START_STICKY使其在后台运行,并使用broadcast receiver在重新启动时启动它。

主要关注的是,无论我编码什么,都在使用MOTO G设备。重启,从后台清除一切,服务运行正常。但在Xiomi手机和Huawei Honour中,一旦从后台清除或重新启动,它就会停止。

Service代码:

public class RemindService extends Service {

final long delayMillis=500;
Handler h=null;
Runnable r;
SharedPreferences sp;

PendingIntent pendingIntent;

private static final int NOTIFY_ME_ID=1337;
@Override
  public void onCreate() {

    h=new Handler(Looper.getMainLooper());
}


@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags,int startId) {



    r = new Runnable() {

           public void run() {


          //SOME OF MY IF-ELSE CONDITIONS


            Intent myIntent = new Intent(RemindService.this, ReminderPopUp.class);
            int randomPIN = (int)(Math.random()*9000)+1000;
            pendingIntent = PendingIntent.getActivity(RemindService.this, randomPIN, myIntent,PendingIntent.FLAG_ONE_SHOT);
            AlarmManager alarmManager = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC|AlarmManager.RTC_WAKEUP, System.currentTimeMillis() , pendingIntent);



            h.postDelayed(this, delayMillis);

        }
      };

    h.post(r);
    return Service.START_STICKY;

}
@Override
  public void onDestroy() {
    h.removeCallbacks(r);

}

}

我的Manifest声明:

<service
        android:name="test.aguai.medieazy.RemindService"
        android:enabled="true" />

    <intent-filter>
        <action android:name="test.aguai.medieazy.START_SERVICE" />
    </intent-filter>

还有其他人遇到过这个问题吗?我认为这是修改操作系统的问题,但无论如何我的应用程序无法正常工作。请帮助。

3 个答案:

答案 0 :(得分:2)

不是不断轮询设备数据库,而是按照我在这个答案中所描述的那样使用AlarmManager服务:

Android Polling from a Server periodically

将闹钟设置为在第一个预定时间触发。当它触发时,设置下一次,依此类推。没有必要立即设置每个警报,因为一次只能触发一个警报。

当警报触发时,您可以启动服务以执行您需要的任何任务(包括设置下一个警报)

答案 1 :(得分:0)

尝试Lik,它会起作用

// for Every 6 minutes exact repeating service
                    Intent myIntent2 = new Intent(sign_in.this,MyAlarmService.class);
                    pendingintent3 = PendingIntent.getService(sign_in.this, 2,myIntent2, 2);
                    AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE);
                    Calendar calendar2 = Calendar.getInstance();
                    calendar2.setTimeInMillis(System.currentTimeMillis());
                    calendar2.add(Calendar.SECOND, 30);

                    alarmManager2.set(AlarmManager.RTC_WAKEUP,calendar2.getTimeInMillis(), pendingintent3);

                    alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP,calendar2.getTimeInMillis(), 360 * 1000,pendingintent3);

清单许可

 <!-- Web data Sync Service -->
        <service android:name="com.example.MyAlarmService" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </service>

答案 2 :(得分:0)

如果您希望服务在明确停止之前运行,请考虑调用startService()来启动该服务。这允许服务无限期运行,并允许客户端通过调用bindService()绑定到服务。

请注意,您必须通过致电stopSelf()stopService()明确停止服务。