【问题标题】:Can not Communicate with UI Thread无法与 UI 线程通信
【发布时间】:2012-04-10 18:46:19
【问题描述】:

我为android做了一个简单的RPC机制应用程序,我遇到了一个问题,我不能从RPC类回到UI线程。

基本上我有 3 个类(ServerActivity、ServerView 和 ServiceImplementation),我创建了 3 个类,因为我使用 RPC 和 Protocol Buffer 进行绘图。

服务器活动:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    _sv = new ServerView(this);
    setContentView(_sv);

    rpcConnectionFactory = SocketRpcConnectionFactories.createServerRpcConnectionFactory(SERVER_PORT);
    int nThreadPool = 1;
    server = new RpcServer(rpcConnectionFactory, Executors.newFixedThreadPool(nThreadPool), true);
    server.registerBlockingService(Service.newReflectiveBlockingService(new ServiceImpl(myServiceHandler)));
    server.run();
}

Handler myServiceHandler = new Handler() {
    public void handleMessage(Message msg) {
        Log.i("Handler", "Handler IN");
        _sv.set(msg.what); /*To communicate with the view*/
        super.handleMessage(msg);
    }
};

服务实现:

public CanvasServiceImpl(Handler mActivity) {
    backToUIThread = mActivity;
}
public Response drawCircle(RpcController controller, Circle1 request)
        throws ServiceException {
    android.os.Message message = new android.os.Message();
    message.what = 1;
    ImplHandler.sendMessage(message);
    Response response = Response.newBuilder().setResult("drawCircle Success").build();
    return response;
}

我无法访问我的 UI 线程。有人知道为什么吗?

谢谢, 罗伯特

【问题讨论】:

    标签: android handler rpc protocol-buffers ui-thread


    【解决方案1】:

    代替

    ImplHandler.sendMessage(message);
    

    使用

    backToUIThread.sendMessage(message);
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多