4

Android サービスがあり、それをアクティビティにバインドし、破棄時にバインドを解除しました。問題は、アプリケーションが閉じられたときに何もない状態で起動することです。デバイスの電源を入れると、突然、トースト メッセージが原因で起動することがあります。コードに行きましょう...

作成時のアクティビティ

Intent intent = new Intent(this, Sincronizacao.class);
this.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
this.startService(intent);

mConnection のコード

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        serviceBound = true;
        localBinder = (LocalBinder<Sincronizacao>) service;
    }
    public void onServiceDisconnected(ComponentName className) {
        serviceBound = false;
        localBinder = null;
    }
};

そして破壊すると

@Override
protected void onDestroy() {
    super.onDestroy();
    if (serviceBound && mConnection != null) {
        unbindService(mConnection);
    }
    Intent intent = new Intent(this, Sincronizacao.class);
    stopService(intent);
    localBinder = null;
}

私のサービスでは、onStartCommand が実装されています。そこで、Web サービスにクエリを実行し、データベースにデータを挿入するスレッドを開始します。スレッドには while(true) があり、サービスの onDestroy メソッドを中断するだけです...

編集

これがマニフェスト行です

android:name="com.company.package.service.Sincronizacao" />

しばらくの間、このバグで苦労しています。助けていただければ幸いです。

ありがとう、

4

1 に答える 1

3

問題を解決できました... サービス内で、コードを から に移動しonStartCommandましたonBind。入札された状態でサービスを使用しているだけなので、問題はありません。

また、以前は でサービス内のスレッドを停止していましたがthread.interrupt()、現在はその間にフラグを使用して、 と で false に設定していonUnbindますonDestroy

于 2012-09-28T01:39:21.780 に答える