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_更新,当前));
}
}