Android studio 后台服务仅在应用程序关闭时激活

Android studio 后台服务仅在应用程序关闭时激活,android-studio,Android Studio,奇怪的是,我的服务确实在后台运行,但是它只在应用程序关闭时创建警报,而不是在运行时创建警报。任何人都可以提供一些关于为什么会发生这种情况的见解。我的服务级别在下面 public class TimeDifferenceService extends Service { DatabaseHelper myDbs; public boolean notificationCheck; @Override public IBinder onBind(Intent intent) { retu

奇怪的是,我的服务确实在后台运行,但是它只在应用程序关闭时创建警报,而不是在运行时创建警报。任何人都可以提供一些关于为什么会发生这种情况的见解。我的服务级别在下面

public class TimeDifferenceService extends Service {
DatabaseHelper myDbs;


public boolean notificationCheck;
@Override
public IBinder onBind(Intent intent) {
    return null;
}

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

@Override
public void onDestroy() {
    super.onDestroy();
}

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



    myDbs = new DatabaseHelper(this);
    mHandler.postDelayed(mUpdateTimeChecker,100);
   return START_STICKY;
}
Handler mHandler = new Handler();
final Runnable mUpdateTimeChecker = new Runnable() {
    public void run() {
        // do whatever you want to change here, like:


        Cursor res = myDbs.GetFirstTime();
        if (res.getCount() == 0) {
            return;
        }

        while (res.moveToNext()) {
            String booleancheck =res.getString(5);
            notificationCheck = Boolean.parseBoolean(booleancheck);

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            TimeZone tz = TimeZone.getDefault();

            Calendar c1 = Calendar.getInstance(tz);
            Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));



            try {
                c1.setTime(sdf.parse(res.getString(1)));
            } catch (ParseException e) {
                e.printStackTrace();
            }


            c2.getTime();
            long timeDiff = ((c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60));

            if (timeDiff <= 60 && timeDiff >=0 && !notificationCheck){
                setAlarm();
                String notifDisplay = "true";
                update(res.getInt(0),notifDisplay);
            }else {

            }

            res.close();
        }
        mHandler.postDelayed(this,1000);
    }

};
public void setAlarm(){
    long alertTime = new GregorianCalendar().getTimeInMillis()+1*1000;
    Intent alertIntent = new Intent(this,AlertReciever.class);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    alarmManager.set(AlarmManager.RTC_WAKEUP,alertTime, PendingIntent.getBroadcast(this,1,alertIntent, PendingIntent.FLAG_UPDATE_CURRENT));

}
公共类时差服务扩展服务{
数据库助手myDbs;
公共布尔通知检查;
@凌驾
公共IBinder onBind(意向){
返回null;
}
@凌驾
public void onCreate(){
super.onCreate();
}
@凌驾
公共空间{
super.ondestory();
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
myDbs=新数据库助手(this);
mHandler.postDelayed(mUpdateTimeChecker,100);
返回开始时间;
}
Handler mHandler=新的Handler();
最终可运行mUpdateTimeChecker=new Runnable(){
公开募捐{
//在此处执行任何您想更改的操作,例如:
Cursor res=myDbs.GetFirstTime();
如果(res.getCount()==0){
返回;
}
while(res.moveToNext()){
String booleancheck=res.getString(5);
notificationCheck=Boolean.parseBoolean(booleancheck);
SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy-MM-dd HH:MM:ss”);
时区tz=TimeZone.getDefault();
Calendar c1=Calendar.getInstance(tz);
Calendar c2=Calendar.getInstance(TimeZone.getTimeZone(“UTC”);
试一试{
c1.setTime(sdf.parse(res.getString(1));
}捕获(解析异常){
e、 printStackTrace();
}
c2.getTime();
长时间差=((c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60));
if(timeDiff=0&!notificationCheck){
设置报警();
字符串notifDisplay=“true”;
更新(res.getInt(0),notifDisplay);
}否则{
}
res.close();
}
mHandler.postDelayed(这个,1000);
}
};
公共无效设置报警(){
long alertTime=new GregorianCalendar().getTimeInMillis()+1*1000;
Intent-alertIntent=新的Intent(这是alertreceiver.class);
AlarmManager AlarmManager=(AlarmManager)getSystemService(Context.ALARM\u服务);
alarmManager.set(alarmManager.RTC_唤醒,alertTime,PendingEvent.getBroadcast(this,1,alertIntent,PendingEvent.FLAG_更新,当前));
}
}