【发布时间】:2021-08-08 04:15:21
【问题描述】:
我有一个应用程序,我想每三分钟打开一个活动,当应用程序打开或在最近的应用程序中时,这已正确完成,但当应用程序从最近的应用程序退出时,它不再工作。 甚至我已经设置了一个警报,每十分钟检查一次,如果服务关闭,它会再次运行,但它似乎不起作用。
这是我的服务代码:
公共类 SampleService 扩展 JobService {
Alarm alarm = new Alarm();
private Timer timer;
@Override
public boolean onStartJob(JobParameters params ) {
alarm.setAlarm(this);
start();
return true;
}
@Override
public boolean onStopJob( JobParameters params ) {
Toast.makeText(this, "Service stop!", Toast.LENGTH_LONG).show();
return false;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
private TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Intent intent = new Intent(SampleService.this, SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
};
public void start() {
if(timer != null) {
return;
}
timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 180000, 180000);
}
public void stop() {
timer.cancel();
timer = null;
}
}
这是我的报警代码:
公共类警报扩展广播接收器{
private JobScheduler jobScheduler;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK , "");
wl.acquire();
if (!isMyServiceRunning(SampleService.class , context)){
jobScheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
ComponentName serviceName = new ComponentName(context.getPackageName(),
SampleService.class.getName());
JobInfo.Builder jobBuilder = new JobInfo.Builder(10, serviceName);
JobInfo myJobInfo = jobBuilder.build();
jobScheduler.schedule(myJobInfo);
Toast.makeText(context, "12345", Toast.LENGTH_LONG).show();
}
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
wl.release();
}
public void setAlarm(Context context)
{
AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute
}
public void cancelAlarm(Context context)
{
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
private boolean isMyServiceRunning(Class<?> serviceClass , Context context) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}
有谁知道我应该怎么做才能解决这个问题?
【问题讨论】:
-
使用AndroidStudio的logcat
-
我应该寻找什么?没有错误或停止或任何可以帮助我的东西
-
像这样:String TAG="你的标签名"; // 添加服务类 Log.d(TAG, "services of running ... ");
标签: android