バインドされたサービスを持つシングルトンオブジェクトがありました。私はそれを再起動したいと思います。ランチャーからアプリケーションを起動すると、シングルトンオブジェクトが初期化され、この既存のサービスインスタンスにバインドされます。ここで固定オブジェクトがカスタムオブジェクトで作成されたときに再起動しない
はシングルトンでサービスを作成し、結合するためのコードです:
public class MyState {
private static MyState sState;
private MyService mService;
private Context mContext;
private boolean mBound = false;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyService.MyBinder binder = (MyService.MyBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
mBound = false;
}
};
public static MyState get(Context context) {
if (sState == null) {
sState = new MyState(context);
}
return sState;
}
public MyState(Context context) {
mContext = context.getApplicationContext();
startService();
}
private void startService() {
Intent intent = new Intent(mContext, MyService.class);
mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
// this won't create another instance of service, but will call onStartCommand
mContext.startService(intent);
}
}
そして、ここでは、私は、タスクリストでこのサービスを私のアプリをスワイプサービス
残念ながらpublic class MyService extends Service {
private final IBinder mBinder = new MyBinder();
public class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
// this method is called by singleton object to stop service manually by user
public void stop() {
stopSelf();
}
@Override
public void onDestroy() {
super.onDestroy();
// some cleanup code here
}
}
、insiceコードです決して再起動しない。この場合、サービスのonDestroyメソッドは呼び出されません。
ユーザーがサービスとやりとりできるアクティビティにバインドを移動したところ、期待通りに動作し始めました。 私の活動の中でアプリケーションのコンテキストを使ってサービスの作成を呼び出そうとしましたが、それでも動作します。
通常のJavaオブジェクトから起動するサービスとは異なるアクティビティからサービスを開始していますか?
私はそれを試してみます。しかし、なぜ私はそれをアクティビティで起動したときにサービスが適切に再開しますか? – nevermourn
アプリケーションが実行されているときに、すべての参照と値がそこにありますが、アプリケーションが終了した後にすべての値がnullになるため、サービスが正しく再起動されます –
実際には私はちょっとばかげていました。 javadocはSTART_STICKYについて語ります。 まだ、アクティビティ内と外で動作が異なる理由はわかりません。 活動中のときは、onDestroyが呼び出されますが、その外にはありません。 – nevermourn