当前位置: 首页 > 面试题库 >

Android:将服务传递给处理程序

汤嘉平
2023-03-14
问题内容

因此,我阅读了android
AIDL文档,并对RPC在活动和服务之间的工作方式有一个大致的了解。但是,对于我的应用程序来说,实现这些功能似乎有些麻烦:基本上,我想向Service传递一个不错的处理程序,以便其线程可以将数据传递给Activity。目前,我正在通过使用静态公共成员(黑客)来解决此问题,但我更希望仅在服务的启动Intent中传递Handler对象。例如,我可以在创建时轻松将int传递给我的服务:

int x = 0;
Intent svc = new Intent(this, MyService.class);
svc.putExtra("x",x);
startService(svc);

但是,由于Handler不可序列化,因此我没有找到一种无需简单的静态成员hack即可将其传递给服务的方法。有见识吗?或者,我是否只需要吸收它并对该服务进行正式的RPC?


问题答案:

如果您的服务和活动处于同一过程中,则可以通过服务传递活页夹,而无需执行复杂的RPC操作:

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

IBinder mBinder = new MyEasyButNotGoodPracticesBinder();

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

然后在您的Activity中,当您获得IBinder对象时,只需将其强制转换为a
MyEasyButNotGoodPracticesBinder并调用该gimmeHandler(Handler)方法。现在,我认为这是不好的做法,因为如果您想将服务放在一个单独的进程中,以使其在崩溃时不会使整个过程崩溃,那么这会中断。我也不认为那是面向未来的。但这确实有效。

AIDL界面并不难-您可能只想这样做。



 类似资料:
  • 问题内容: 我想将由Razor MVC帮助程序在我的登录表单中生成的RequestVerificationToken传递给我为管理应用程序身份验证而完成的AngularJS服务 我的形式如下: @ Html.AntiForgeryToken()以这种方式呈现: 我的AngujarJs控制器成功注入了我的“ loginService”,我可以通过Post发送用户名和密码到服务 服务: 我的问题是如何

  • 问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,

  • 我有一个在视图上执行动画的功能。我想为此函数实现一个完成处理程序,该处理程序将在动画完成后调用。 在ViewController中... 在HudView类中... 我尝试了很多方法,但找不到正确的语法: 传递非转义参数“myCompletionHandler”到函数,期望一个@转义闭包 无法将“Void”类型的值转换为预期的参数类型“((Bool) - 闭包:使用非转义参数“myCompleti

  • 问题内容: 我使用React Router的React.js应用程序具有以下结构: 我想将一些属性传递给组件。 (通常我会这样做) 用React Router做到这一点最简单,正确的方法是什么? 问题答案: 更新 自新版本发布以来,无需使用包装器就可以直接通过组件传递道具。例如,通过使用prop。 零件: 用法: 旧版本 我的首选方式是包装组件并将包装器作为路由处理程序传递。 这是您应用了更改的示

  • 我正在使用注释处理来生成一些类...我有两个模块,处理器本身和使用它的“客户端”模块。我想通过客户端向处理器传递一个参数,我可以这样做 如何在处理器端检索此参数?

  • 问题内容: 我想将关联数组传递给json wcf服务。 因此,在JavaScript中,我与此类似: 在我的wcf服务中,我希望有一个字典: 但是它将地图作为[Object object]发送而不是序列化,因为’map’实际上只是我为其分配属性的对象。 有谁知道我可以正确地序列化它以使其由WCF服务反序列化为Dictionary对象? 问题答案: 默认情况下,WCF不表示为JSON对象- 而是将它