繁体   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