android - 从 App 到 Android 中的 SystemService 的通信

标签 android multithreading handler android-source android-service-binding

我实际上是在尝试在 Android 中创建一个 SystemService。我读到从应用程序到此服务的相互通信应该由处理程序处理?

那么如何从服务函数返回一些对象给调用应用程序呢?如何处理。

为了让我的问题更清楚,假设我有一个具有以下方法定义的服务 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 实例调用此方法并像传统方式一样正常处理吗?或者我是否必须与极不可能的处理程序一起工作(我相信)。请告诉我处理这种情况的最佳流程。

谢谢

最佳答案

您不必使用处理程序来执行任何操作。如果您已经创建了一个描述与服务通信的 AIDL 文件,那么您就大功告成了:接下来您要做的就是在您的服务中实现 AIDL 方法。 当 Android“编译器”将 AIDL 翻译成 java 代码时,您的功能将全部阻塞(客户端将等待服务完成方法)。 如果您专门添加关键字“oneway”,则方法调用不会被阻塞。 您应该查看 Google 关于 IBinder 的文档以更好地理解事情。

关于android - 从 App 到 Android 中的 SystemService 的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22827098/

相关文章:

java - 如何为 ScrollView 设置 OnClickListener?

android - 如果我使用 Crashlytics,我该如何使用 "Apply Changes"?

android - DirectByteBufferException 鲸鱼在 fragment 中获取不同的 map

python - 为什么我的线程中的 python 套接字并不总是正确关闭(即,如果我连续多次运行该程序)

ios - 在 iOS 中使用照片框架获取图像路径时 UI 被阻塞

asp.net - 如何使用 asp.net 处理程序设置 html 正文背景图像?

android - Google play 游戏服务,确定主机或服务器

.net - Console.WriteLine 会阻塞吗?

在linux中使用单个信号处理程序创建多个计时器?

python - 如何在事件处理程序中访问外部对象?