2012-03-27 6 views
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 스레드에 도달 할 수 있습니다. 왜 아무도 알지 못해?

감사합니다, 로버트

답변

0

대신

ImplHandler.sendMessage(message); 

사용

backToUIThread.sendMessage(message); 
관련 문제