をあなたの場所が更新されます、あなたを助けます
private final IBinder _Binder = new LocalBinder();
@Override
public IBinder onBind(Intent arg0) {
return _Binder;
}
/**
* Class for clients to access. Because we know this service always runs in
* the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
public MyService getService() {
return MyService.this;
}
}
:あなたのサービスは、バインダーを必要と
private ServiceConnection _svcConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
_myService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
_myService = ((MyService.LocalBinder) service).getService();
if(!_myService.IsRunning())
_myService.Start();
}
};
@Override
protected void onResume() {
bindService(new Intent(Main.this, MyService.class), _svcConnection
BIND_AUTO_CREATE);
startService(new Intent(Main.this, MyService.class));
super.onResume();
}
@Override
protected void onPause() {
unbindService(_svcConnection);
super.onPause();
}
:あなたの活動には、単純なサービス接続 は、次のようなものが含まれます
次に、_MyServiceオブジェクトを操作し、その上で任意のメソッドを呼び出すことができます。 (E. g。コールバックの登録またはロケーションアップデートのリクエスト)、サービス接続が失敗した場合、_MyService変数はnullになります。
このサービスに別のアプリケーション(別のプロセス)からアクセスする必要がある場合は、IPCに対処する必要があります。
私はすべてのコードを理解していません。私はいくつかの質問があります:サービスをバインドするアクティビティが終了する、または一時停止されたなどの場合、onResumeはサービスを再起動しますか? – FrioneL
アクティビティのライブバイについては、[Android Documentation](http://developer.android.com/reference/android/app/Activity.html)を参照してください。アクティビティがインテントによって開始された場合、またはバックグラウンドから再開された場合、またはユーザーが起動した場合、OnResumeが呼び出されます。このメソッドでは、サービスへのバインディングが要求されます(bindService)。サービスが現在実行されていない場合は、アンドロイドシステムで開始します(最初のアプリケーションの開始など)。 OnPauseは、メモリリークを回避するために、アクティビティからサービスをバインド解除するだけです。サービスが停止しない、またはシステムによって強制終了された場合、サービスは無期限に続行されます。 – Vertigo