簡體   English   中英

從App到Android中的SystemService的通信

[英]Communication from App to a SystemService in Android

我實質上是在嘗試在Android中創建SystemService。 我讀到從應用程序到該服務的互通應該由Handler處理嗎?

那么,如何將一些對象從服務的功能返回給調用的應用程序呢? 如何處理。

為了使我的問題更清楚,想象一下,我有一個帶有以下方法定義的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()的一部分執行

怎么樣getValue方法可以使用Service實例對該方法進行調用並像我們傳統上那樣正常處理它? 還是我必須與不太可能的處理程序一起工作(我相信)。 請讓我知道在這種情況下處理的最佳過程。

謝謝

您不必使用Handler來執行任何操作。 如果創建了描述與服務通信的AIDL文件,那么您就完成了:接下來要做的就是在服務內部實現AIDL方法。 當AIDL由Android“編譯器”翻譯為Java代碼時,所有功能都會被阻塞(客戶端將等待服務完成方法)。 如果您專門添加關鍵字“單向”,則方法調用將不會阻塞。 您應該查看IBinder上的Google文檔,以更好地了解事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM