2012-03-31 15 views
2

私のアクティビティはサービスを開始し、アプリケーションを閉じるとサービスは引き続き実行されます。 OK、そうです。しかし、私が再びアプリケーションを開くと、アクティビティで、私が以前に起動した実行中のサービス(クラス)で定義されたパブリック変数の値を知る必要があります。Android:実行中のサービスから変数を取得する

どうすればいいですか?

おかげ

答えて

1

あなたがunbindServiceを呼び出さない場合は、あなたの活動はまだサービスへの接続を持っていて、単にサービスのメソッドを介して変数を確認することができます。

+0

ありがとうございます!それがポイントです。私はunbindServiceを呼び出さない。しかし私は自分のアクティビティを通してサービスのメソッドを呼び出す方法を知らない。 bindServiceとonServiceConnectedを使用しようとしましたが、成功しませんでした。 – Daniel

+0

まあ、それは問題です。あなたは質問が誤解を招くことです。あなたは正しい質問をしなければなりません。さもなければあなたはどこにも行きません。 http://developer.android.com/guide/topics/fundamentals/bound-services.html ActivityMessengerコードを見る –

1

messengerを使用できます。 アンドロイドウェブサイトごと

メッセンジャーは、他の人がハンドラにメッセージを送信するために使用できるハンドラへの参照です。これにより、あるプロセスでハンドラを指し示すMessengerを作成し、そのMessengerを別のプロセスに渡すことで、プロセス間でメッセージベースの通信を実装できます。

2

アクティビティをサービスにバインドする場合は、ServiceBinderインターフェイスの実装が必要です。あなたの活動に

public class ServiceBinder extends Binder { 
    public MyService getService() { 
     return MyService.this; 
    } 
} 

、あなたのサービスへのアクセスを提供するために使用される新しいServiceConnectionクラスの作成:ここで

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     mMyService = ((MyService.ServiceBinder)service).getService(); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mMyService = null; 
    } 
}; 

をメンバ変数mMyServiceは、あなたのすべてのパブリックメンバーへのあなたのアクセスを提供しますサービスクラス。

あなたの活動にdoBindServicedoUnbindServiceを実装し、接続を作成するには:

void doBindService() { 
    bindService(new Intent(this, MyService.class), mConnection, Context.BIND_AUTO_CREATE); 
} 

void doUnbindService() { 
    // Detach our existing connection. 
    unbindService(mConnection); 
} 

は、この情報がお役に立てば幸い!

関連する問題