私は本質的に Android で SystemService を作成しようとしています。アプリからこのサービスへの相互通信はハンドラーによって処理されるべきだと読みましたか?
では、Service の関数から呼び出し元のアプリに何らかのオブジェクトを返すのはどうでしょうか? これはどのように処理できますか。
私の質問をより明確にするために、次のメソッド定義を持つ Service TestService があると想像してください。
public class TestService extends ITestService.Stub {
public TestService(Context context) {
super();
mContext = context;
mWorker = new TestWorkerThread("TestServiceWorker");
mWorker.start();
Log.i(TAG, "Spawned worker thread");
}
public void setValue(int val) {
Message msg = Message.obtain();
msg.what = TestWorkerHandler.MESSAGE_SET;
msg.arg1 = val;
mHandler.sendMessage(msg);
}
public Object getValue() {
// ********************* QUESTION HERE *****************
// Can I call this method directly??
// Or do I have to process this through the handler?????
}
private class TestWorkerThread extends Thread {
public TestWorkerThread(String name) {
super(name);
}
public void run() {
Looper.prepare();
mHandler = new TestWorkerHandler();
Looper.loop();
}
}
private class TestWorkerHandler extends Handler {
private static final int MESSAGE_SET = 0;
@Override
public void handleMessage(Message msg) {
try {
if (msg.what == MESSAGE_SET) {
Log.i(TAG, "set message received: " + msg.arg1);
}
} catch (Exception e) {
// Log, don't crash!
Log.e(TAG, "Exception in TestWorkerHandler.handleMessage:", e);
}
}
}
}
これは、同期するために上記から私が理解していることです。通常、setValue を handleMessage() の一部として実行します。
Service インスタンスを使用してこのメソッドを呼び出し、従来の方法と同様に通常どおり処理できる getValue メソッドについてはどうでしょうか。または、非常にありそうもないハンドラーを使用する必要がありますか (私は信じています)。このシナリオで対処するための最良のプロセスを教えてください。
ありがとう