Android 应用程序启动时服务启动不起作用?

Android Service Start is not working when app start?

我试图在每天的 8:30.am 设置一个重启应用程序的闹钟,所以我设计了服务和接收器,

     <receiver android:name=".AlarmReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.SCREEN_OFF" />
        </intent-filter>
    </receiver>

AlarmReceiver.java

    public class AlarmReceiver extends BroadcastReceiver{
       public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (Intent.ACTION_SCREEN_ON.equals(action)){  //not working ?
          Log.d("BootReceiver", "screen on completed");
          Intent Alarm = new Intent(context,LongRunningService.class);  //start Service
          context.startService(Alarm);
       }

       if (Intent.ACTION_BOOT_COMPLETED.equals(action)){ //not working ?
        Log.d("BootReceiver", "system boot completed");
        Intent Alarm = new Intent(context,LongRunningService.class); //start Service
        context.startService(Alarm);
       }

       if ("startAlarm".equals(intent.getAction())){
        Intent home = new Intent(context, MainActivity.class);
        home.putExtra("RELOAD",1);
        home.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(home);
    }

LongRunningService.java

    public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(new Runnable(){

        @Override
        public void run() {
            Log.i(TAG, "run: executed at "+ new Date().toString()); //not working?
        }
    }).start();

    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);

    // Set the alarm to start at 8:30 a.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 8);   
    calendar.set(Calendar.MINUTE, 30);     
    calendar.set(Calendar.SECOND, 00);   

  }

其实我是在MainActivity中启动服务的,但是我不想启动服务

onCrate in MainActivity , 因为我的闹钟设置 8:30 重启 MainActivity,

那将是问题,8:30:00 ~ 8:30:30 将重复重启我的应用....

根据docs

Apps that target Android 8.0 or higher can no longer register broadcast receivers for implicit broadcasts in their manifest. An implicit broadcast is a broadcast that does not target that app specifically

所以,如果你想接收这个广播,你需要在应用 运行 期间注册它们(只有当你的应用没有被销毁时它才会起作用)。 JobScheduler 我认为会更符合您的需求。