Java 在Android中,如何在BroadcastReceiver触发之前启动服务?
我有一个BroadcastReceiver类,它有时会触发,我还有一个Service类。我的服务类从名为G.class的应用程序类开始。我希望我的服务类在广播接收类之前开始。但正如我在LogCat中看到的,第一个G.class开始,它结束,然后BroadcastReceiver类开始,它结束,然后服务类开始。有什么问题 AlarmReceiver.class } G级 ApplicationService.class 我的接受者是如何被触发的 我的日志Java 在Android中,如何在BroadcastReceiver触发之前启动服务?,java,android,service,broadcastreceiver,Java,Android,Service,Broadcastreceiver,我有一个BroadcastReceiver类,它有时会触发,我还有一个Service类。我的服务类从名为G.class的应用程序类开始。我希望我的服务类在广播接收类之前开始。但正如我在LogCat中看到的,第一个G.class开始,它结束,然后BroadcastReceiver类开始,它结束,然后服务类开始。有什么问题 AlarmReceiver.class } G级 ApplicationService.class 我的接受者是如何被触发的 我的日志 这是不可能的。下面是正在发生的事情: 闹钟
这是不可能的。下面是正在发生的事情: 闹钟响了 未运行的应用程序已启动。接收到的广播会被记录下来,并在主线程上的处理程序中放入一个调用接收器的动作 应用程序创建应用程序类。这将调用startService,它将向主线程上的处理程序添加创建服务的操作 主线程消息循环返回到。它接收队列上的下一条消息BR消息,并运行它,启动BroadcastReceiver 主线程消息循环返回到。它接收队列上的下一条消息,即SS消息,并运行它,启动服务
在任何情况下都无法更改订单 广播接收器的触发器来自哪里?@tyczj邮报编辑
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Intent;
import com.hadi.android.dm.app.Logger;
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Logger.i("receiver started");
//do something
}
import android.content.Intent;
public class G extends Application {
@Override
public void onCreate() {
super.onCreate();
Logger.i("G started");
startService(new Intent(getApplicationContext(), ApplicationService.class));
Logger.i("G ended");
}
import android.app.Service;
import android.content.Context;
import android.content.Intent;
public class ApplicationService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Logger.i("service started");
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Logger.i("service ended");
}
}
public void schedule(long time) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 2, new Intent(context, AlarmReceiver.class), 0);
android.app.AlarmManager alarmManager = (android.app.AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(android.app.AlarmManager.RTC_WAKEUP, time, pendingIntent);
} else {
alarmManager.set(android.app.AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
}
07-09 00:44:00.797 18172-18172/com.hadi.android.dm I/MYAPP: G started
07-09 00:44:00.886 18172-18172/com.hadi.android.dm I/MYAPP: G ended
07-09 00:44:00.888 18172-18172/com.hadi.android.dm I/MYAPP: receiver started
07-09 00:44:00.890 18172-18172/com.hadi.android.dm I/MYAPP: service started