Android: Passing a Service a Handler

老子叫甜甜 提交于 2019-11-28 13:56:22

If your Service and Activity are in the same process, you can pass a Binder from your Service without doing the complicated RPC stuff:

public class MyEasyButNotGoodPracticesBinder {
    public void gimmeHandler(Handler handler) {
        // you got it!
    }
}

IBinder mBinder = new MyEasyButNotGoodPracticesBinder();

public IBinder onBind(Intent intent) {
    return mBinder;
}

Then in your Activity when you get the IBinder object just cast it to a MyEasyButNotGoodPracticesBinder and call the gimmeHandler(Handler) method. Now, I think this is bad practices because if you ever want to put your Service in a separate process so that it doesn't crash the whole process if it crashes, this would break. I don't think it's that future-proof either. But it does work.

An AIDL interface is not that hard - you may just want to do that instead.

Android documentation suggests to work with a messenger as client interface in their Remote Messenger Service Sample: Remote Messenger Service Sample

Code example can be found in the link above, no need to repost here I guess...

Regards, Michael

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!