Android:无法绑定到已经运行的服务,onServiceConnected未调用

时间:2017-04-15 12:16:13

标签: java android android-service android-service-binding

我有正在运行的服务(之前已成功绑定,已启动且未与主要活动绑定):

Intent startingIntent = new Intent(this, SturkoPlayerService.class);
startingIntent.setAction(SturkoPlayerService.PLAYER_START);
bindService(startingIntent, connection, Context.BIND_AUTO_CREATE);

当我成功关闭主要活动(服务未绑定并继续运行)并想要通知意图重新打开主要活动时:

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("Service", 1);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); //tried also another flags
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

然后尝试绑定正在运行的服务

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ...

    if (getIntent() != null && getIntent().hasExtra("Service")) {
        if (!bound) {
            bindService(new Intent(this, SturkoPlayerService.class), connection, 0);
        }
    }
}

我的Connection变量的onServiceConnected函数未调用

private ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        SturkoPlayerService.LocalBinder mBinder = (SturkoPlayerService.LocalBinder) service;
        sturkoService = mBinder.getService();
        bound = true;
        sturkoService.registerClient(MainActivity.this);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        bound = false;
    }
};

清单:

...
<activity android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:launchMode="singleTask"> //tried other modes too
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<service
    android:name=".Service.SturkoPlayerService"
    android:enabled="true"
    android:exported="true"
    android:singleUser="true">
</service>
...

P.S。: Catlog没有显示任何内容

1 个答案:

答案 0 :(得分:0)

只有在以下情况下才会运行服务:

  • 有1个以上的客户端绑定到它,或

  • 您在其上调用startService()并且没有任何内容停止(例如,stopSelf()stopService()

否则,一旦最后一个绑定连接未绑定,服务就会停止。