1
나는 간단한 RPC 메카니즘을 android 용으로 만들었으며 나는 RPC 클래스에서 UI Thread로 돌아갈 수 없다는 문제에 봉착했다.UI 스레드와 통신 할 수 없음
기본적으로 나는 3 개의 클래스 (ServerActivity, ServerView 및 ServiceImplementation)를 가지고 있으며 그리기를 위해 RPC와 프로토콜 버퍼를 사용하기 때문에 3 개의 클래스를 만들었습니다.
서버 작업 :
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);
}
};
ServiceImplementation는 :
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 스레드에 도달 할 수 있습니다. 왜 아무도 알지 못해?
감사합니다, 로버트