ジンジャーブレッド2.3.4apilvl10を使用します。
起動が完了してからサービスを開始しています。そのために、サービスを開始する放送受信機を追加しました。ランチャーで同じサービスを使用しています。インテントにパラメータを追加してサービスにバインドしようとしています。ブロードキャスト応答によるサービスからの結果の取得。
問題は、最初にバインドするときに、サービスのonBind()がトリガーされることです。それ以降のバインディングは、サービスでonBind()を呼び出しません。問題は、サービスがboot_bootの直後に開始されることだと思います。起動時にサービスを開始せず、アクティビティにContext.BIND_AUTO_CREATEを使用してサービスを開始させると、期待どおりに動作します。
私が思いついた唯一の解決策は、サービスのonUnbind()を変更し、サービスのonRebind()呼び出しでonBind()を発行することです。このソリューションは、onBind()メソッドが2回呼び出される原因となる、後のAndroidバージョンで機能しなくなる可能性があるため、私は好きではありません。
それでは、起動が完了した後に起動するサービスで後続のバインドがトリガーされないのはなぜですか。他のエレガントなソリューションは大歓迎です。
PS:私はすでにaidlに実装しましたが、サービスがデータを返すために非同期処理を実行し、両方のアプリにaidlファイルを追加する必要があるため、コードが肥大化するハンドラーが追加されるため、気に入らないです。
前もって感謝します。私のコードの抜粋:
サービスのマニフェスト:
<intent-filter>
<action android:name="com.organization.android.ACTION_BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="com.organization.android.WORK_INTENT" />
</intent-filter>
</service>
<receiver android:name=".CoreServiceReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.HOME" >
</category>
</intent-filter>
</receiver>
サービスにバインドするとき:
インテントインテント=newIntent(WORK_INTENT); intent.putExtra( "param"、param);
context.registerReceiver (broadcastReceiver, new IntentFilter("com.organization.android.WORK_RESULT"));
context.bindService(intent,mConnection, Context.BIND_AUTO_CREATE);
}
結果が出たら:
context.unbindService(mConnection);
context.unregisterReceiver (broadcastReceiver);