1

Androidで拡張して1つのサービスを作成し、 と を使用してサービスServiceに送信しています。MessageMessengerHandler

しかし、問題 (これは一般的な動作ですが) は、サービスにメッセージを送信する必要があるときはいつでも送信する必要がbindあり、活動をunbind停止すると、最終的にサービス自体を破壊する必要があります。

フリンジ メソッドを使用してバックグラウンドでサービスを実行し続けることができますが、活動を停止したときにサービスを破棄したくないため、startService使用せずにメッセージをサービスに送信する方法はありますか。bind

4

2 に答える 2

6

LocalBroadcastManagerは、メッセージ/データを送信する優れた方法です。

サービス クラスで、プライベート ブロードキャストレシーバーとインテント アクション名の文字列を作成します。

public static String MSERVICEBROADCASTRECEIVERACTION ="whatevs";
private BroadcastReceiver mServiceBroadcastReceiver= new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("foo","onReceive called");
        Log.d("foo","extra = " + intent.getStringExtra("foo")); // should print out " extra = bar"

    }
};

そしてそれをあなたのonCreate

@Override
public void onCreate() {
        // your other code...
         LocalBroadcastManager.getInstance(this).registerReceiver(mServiceBroadcastReceiver, new IntentFilter(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION));
    }

そして onDestroy() で登録解除します

@Override
public void onDestroy() {
        // your other code...
         LocalBroadcastManager.getInstance(this).unregisterReceiver(mServiceBroadcastReceiver);
    }

アクティビティまたはフラグメントからのメッセージの送信に関しては、次のようになります。

    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
    Intent intent = new Intent(ServiceClassName.MSERVICEBROADCASTRECEIVERACTION);
    // add some data 
    intent.putExtra("foo","bar");
    lbm.sendBroadcast(intent);

必要なくデータを送信する HTH bind!

于 2014-03-28T13:18:30.833 に答える