![](/img/trans.png)
[英]Android BroadcastReceiver wait for Service to start or transmit WakeLock to Service?
[英]How to start Service before BroadcastReceiver gets trigged in Android?
我有一个BroadcastReceiver
类,有时会触发它,还有一个Service
类。 我的Service
类从名为G.class
Application
类开始。 我希望我的Service
类在BroadcastReceiver
类之前开始。 但是正如我在LogCat
看到的那样,首先是G.class
开始,然后结束,然后BroadcastReceiver
类开始,然后结束,然后是Service
类。 问题是什么?
AlarmReceiver.class
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
}
}
G.class
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");
}
ApplicationService.class
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");
}
}
我的BroadcastReciever如何触发
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);
}
}
我的LogCat
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
没有办法做到这一点。 这是正在发生的事情:
警报响起
未运行的应用程序已启动。 记录接收到的广播,并在主线程上的Handler中放置一个调用接收器的动作。
该应用程序创建Application类。 这将调用startService,这将向主线程上的Handler添加一个操作以创建服务。
返回主线程消息循环。 它接收队列中的下一条消息,即BR消息,并运行它,启动BroadcastReceiver。
返回主线程消息循环。 它接收队列中的下一条消息(SS消息)并运行它,以启动服务。
在任何一种情况下都无法更改顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.