如果以非默认方式运行的BroadCastReceiver启动服务,该服务将在哪个进程中运行?

时间:2016-05-05 12:16:36

标签: android android-service android-alarms

试着了解Android中的流程如何运作。 假设我有一个名为FancyService的 PendingService 和一个警报接收器:

<receiver
  android:name=".FancyAlarmReceiver"
  android:process=":remote" />
<service
  android:name=".FancyService"
  android:exported="false" />

请注意,接收方是process = remote,但服务不是。

现在,让我们假设AlarmReceiver刚刚开始FancyService ......

public class FancyAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) { 
        Intent i = new Intent(context, MyTestService.class);
        i.setAction(intent.getAction());
        context.startService(i);
    }
}

...那么服务运行的过程是什么?默认进程,还是:远程进程?

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题:服务将在默认线程上运行,而不是在远程线程上运行。

我刚做了一个实验,将Log.i放在了AlarmReceiver的onReceive中,并放在了FancyService的onHandleIntent中,并查看了Android Monitor中处理日志的过程.FancyService确实登录了main,默认进程,即使它是由AlarmReceiver从:远程线程启动的(确实登录了远程线程)。