センサーデータを収集するサービスがあります。サービスはクラスで開始されます。それを呼び出しましょうx
。内部では、 webviewx
の JavaScript インターフェース用にいくつかのメソッドを定義しました。
ここで、そのデータを内部に取得してx
、それを webview に挿入してサーバーに投稿する必要があります。これのベストプラクティスは何ですか?
x
内部のサービス インスタンスへの参照を取得して、そのメソッドとプロパティにアクセスするにはどうすればよいですか?
私はそれを行う2つの方法を知っています。サービスをシングルトンとして宣言し、変数にアクセスするメソッドを実装します。
YourService.getInstance().getVariable();
しかし、私はこの方法をお勧めしません。
もう 1 つは、Android が提供するバインダー システムを使用する方法です。
アクティビティのコード。
private YourService yourService;
private boolean serviceBound = false;
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName cn, IBinder ib) {
yourService = ((YourService.ServiceBinder) ib).getInfo();
serviceBound = true;
}
public void onServiceDisconnected(ComponentName cn) {
serviceBound = false;
}
};
次に、サービスに実装されているメソッドを yourService オブジェクトで呼び出すことができます。
このように、サービスにバインダーを実装する必要もあります。
public class ServiceBinder extends Binder {
public YourService getInfo() {
return YourService.this;
}
}
それが役に立ったことを願っています。
それが最善の方法かどうかはわかりませんが、最近、アプリケーション構造を使用してこの問題を解決しました。
クラスを作成します。
public class myApp extends Application {
public int yourData;
}
次に、次のコードを使用して、プログラム内のアクティビティからアクセスします。
myApp app = (myApp) getApplication();
int localVar = app.yourData;
Android マニフェストを更新することを忘れないでください
<application
android:name="myApp"