我在主线程里面启动了一个service,在service里面启动了一个线程,在线程中实例化了一个handler
handler处理好数据之后,怎么样才可以传回主界面MainActivity呢?? 线程神马的都是用的外部类... 

解决方案 »

  1.   

    Message msg = new Message();
    msg.what = 66000 + Util.onCmmbGetSignalStatus;
    Bundle bundle = new Bundle();
    bundle.putInt("signalPower", signal.signalPower);
    bundle.putInt("signalQuality", signal.signalQuality);
    bundle.putInt("SNR", signal.SNR);
    bundle.putInt("reserved1", signal.reserved1);
    bundle.putInt("reserved2", signal.reserved2);
    msg.setData(bundle);
    handle.sendMessage(msg);
    如上
      

  2.   

    Message msg = new Message();
    msg.arg0
    msg.arg1
    msg.what
      

  3.   

    Message msg = handler.obtainMessage();  msg.arg1 = i;  msg.sendToTarget(); 
    Message msg=new Message();  msg.arg1=i;  handler.sendMessage(msg);
    第一种写法是message 从handler 类获取,从而可以直接向该handler 对象发送消息;
    第二种写法是直接调用 handler 的发送消息方法发送消息。
      

  4.   

    对2L的回答稍作补充,handler是在新线程中实例化的, handler.sendMessage(msg)仍会将消息传递到新线程中处理,所以此处的handler并非是你在新线程中的,而应是在主线程中。
    除此之外,如果是需对UI操作,可在新线程中使用post方法。AsyncTask没准也适合你,可以试试看。
      

  5.   

    AsyncTask,试一下这种方法吧。
      

  6.   

    service运行Handler:
    得到Handler对象
    通过Handler对象得到Message(android推荐)
    最后再发送消息(貌似用arg好像速度快点)再这也借这楼问个关于Handler的问题,忘老鸟解答
    我们直接New Hanlder() 不带参数的话  默认的是主线程的Looper 也就是主线程的Handler
    但我这样在程序中 试 得到的不是主UI的Handler 这是怎么会事?(代替的方法我把Handler弄成静态的了 但这样又带来了新的问题 在这就不说了)还当一个主线程下有多个Handler  我通过new Handler()方法又得到是那个Handler? 怎么把同一线程的Handler 进行区分?
    忘高手解答?
    还有Ls的说到了AsyncTask 其实据鄙人所知的Activity和Service通信有不下10种方式
    有老鸟能说说最方便的是那种 说出理由吗?
    跪求????