に問題がありbindService()
ます。コンストラクターでバインディングを実行しようとしており、2 つのパークリア可能なエクストラを含むインテントを提供しています。コンストラクターが呼び出されonResume()
、サービスはそのonBind()
メソッドで 2 つのエクストラを解析し、解析null
の結果として返される場合があります。
最初にアプリを実行すると (Run in Eclipse を介して)、バインディングは (予想どおり) サービスによって拒否されます。サービスのonBind()
メソッドが呼び出されて が返されますnull
。ただし、bindService()
アプリケーション側のメソッドは戻りますtrue
(バインディングが通過しなかったため、そうすべきではありません!)。
次のことを試すと、これはさらに問題になります。HOME ボタンを押して、アプリを再起動します (アプリが再度onResume()
実行され、アプリがサービスへのバインドを再試行します)。今回はサービスonBind()
も実行されていないようです!しかし、アプリはbindService()
まだ戻ってきますtrue
!
以下は、私の問題を理解するのに役立つサンプル コードです。
アプリケーション側:
// activity's onResume()
@Override
public void onResume() {
super.onResume();
var = new Constructor(this);
}
// the constructor
public Constructor(Context context) {
final Intent bindIntent = new Intent("test");
bindIntent.putExtra("extra1",extra_A);
bindIntent.putExtra("extra2",extra_B);
isBound = context.bindService(bindIntent, connection, Context.BIND_ADJUST_WITH_ACTIVITY);
log("tried to bind... isBound="+isBound);
}
サービス側:
private MyAIDLService service = null;
@Override
public void onCreate() {
service = new MyAIDLService(getContentResolver());
}
@Override
public IBinder onBind(final Intent intent) {
log("onBind() called");
if (intent.getAction().equals("test") {
ExtraObj extra_A = intent.getParcelableExtra("extra1");
ExtraObj extra_B = intent.getParcelableExtra("extra2");
if (parse(extra_A,extra_B))
return service;
else {
log("rejected binding");
return null;
}
}
}
ServiceConnection
私が使用している は、次のメソッドを保持していますonServiceConnected()
。
@Override
public void onServiceConnected(final ComponentName name, final IBinder service) {
log("onServiceConnected(): successfully connected to the service!");
this.service = MyAIDLService.asInterface(service);
}
そのため、「サービスに正常に接続されました!」というメッセージが表示されることはありません。ログ。(Eclipse を使用して) アプリを初めて実行すると、「拒否されたバインディング」ログと「isBound=true」が表示されますが、それ以降は「isBound=true」のみが取得され、「拒否されたバインディング」は取得されません。二度と来ないで。
これは、強制的に拒否した場合でも、バインドが成功したことを Android が認識する可能性に関係していると思われます。理想的には、「アンバインド」も強制できますが、それは不可能です。これは、アプリを強制終了するonUnbind()
と、サービスのメソッドにあるログを取得しているためだと思われます (そもそも拘束力なし!)。