解决方案 »

  1.   

    Handler就是在UI线程里的,你直接在handleMessage里执行Toast就ok了
      

  2.   

    我这只是测试的,我真实的是这样的,在一个工具类的一个方法中使用了thread,去访问网络,然后获得相关值后,返回给UI,然后UI继续处理
      

  3.   

    我这只是测试的,我真实的是这样的,在一个工具类的一个方法中使用了thread,去访问网络,然后获得相关值后,返回给UI,然后UI继续处理
    那你在工具类中传入个回调,然后把获取到的值通过回调传回UI线程,回调方法中使用message发给handler进行处理就行了
      

  4.   

    你刚start一个线程,就去拿结果,这个线程还没被执行呢。线程.start()不是说立马就会被执行,而是加入线程队列等待被执行。
      

  5.   

    我这只是测试的,我真实的是这样的,在一个工具类的一个方法中使用了thread,去访问网络,然后获得相关值后,返回给UI,然后UI继续处理
    那你在工具类中传入个回调,然后把获取到的值通过回调传回UI线程,回调方法中使用message发给handler进行处理就行了
    谢谢,这个听起来不错,有相关的资料可以推荐一下吗?
      

  6.   

    你的线程还不一定执行了,你可以把操作封装成一个函数,然后在handleMessage中调用它,这样就可以了
      

  7.   

    你这个问题是我没有认识到的,如果是这样,那如果保证等子线程运行完后,传回值了后,UI才继续执行,不然就等待呢?谢谢建议你先学习多线程原理,单核CPU只有一个计算能力,一次只能做一种事情,多线程就是很多任务都需要做。有系统确定优先级去响应这些任务。
    不是说子线程执行完了,才能执行主线程。可能是子线程执行一半就去执行主线程了,这要看谁的需求大。谁的时间片段是都执行完。
    为保证线程执行有先后顺序,有线程同步的概念。线程不是几句话能说明白的。当你知道原理了,你自然就会用了。
      

  8.   

    你这个问题是我没有认识到的,如果是这样,那如果保证等子线程运行完后,传回值了后,UI才继续执行,不然就等待呢?谢谢建议你先学习多线程原理,单核CPU只有一个计算能力,一次只能做一种事情,多线程就是很多任务都需要做。有系统确定优先级去响应这些任务。
    不是说子线程执行完了,才能执行主线程。可能是子线程执行一半就去执行主线程了,这要看谁的需求大。谁的时间片段是都执行完。
    为保证线程执行有先后顺序,有线程同步的概念。线程不是几句话能说明白的。当你知道原理了,你自然就会用了。我明白你的意思,我也知道线程的一些情况,我只是不太清楚安卓里有没有相关的API可以把UI挂载起来,等UI里开启的某个子线程运行完成后,并返回了相应的值后,才继续执行,或者是有没有相关的处理办法,我才接触安卓,不熟悉它的功能,我目前是在一个函数(准确的说应该是方法)里使用了的线程,我然后在UI里调用了这个方法,我想UI能获取这个方法的返回值,并且反这个值进行进一步的处理,最终完成我所设计的功能,谢谢楼上各位!
      

  9.   

    我这只是测试的,我真实的是这样的,在一个工具类的一个方法中使用了thread,去访问网络,然后获得相关值后,返回给UI,然后UI继续处理
    那你在工具类中传入个回调,然后把获取到的值通过回调传回UI线程,回调方法中使用message发给handler进行处理就行了
    谢谢,这个听起来不错,有相关的资料可以推荐一下吗?百度 handler thread就有了 http://blog.csdn.net/mylzc/article/details/6736988
      

  10.   

    你这个问题是我没有认识到的,如果是这样,那如果保证等子线程运行完后,传回值了后,UI才继续执行,不然就等待呢?谢谢建议你先学习多线程原理,单核CPU只有一个计算能力,一次只能做一种事情,多线程就是很多任务都需要做。有系统确定优先级去响应这些任务。
    不是说子线程执行完了,才能执行主线程。可能是子线程执行一半就去执行主线程了,这要看谁的需求大。谁的时间片段是都执行完。
    为保证线程执行有先后顺序,有线程同步的概念。线程不是几句话能说明白的。当你知道原理了,你自然就会用了。我明白你的意思,我也知道线程的一些情况,我只是不太清楚安卓里有没有相关的API可以把UI挂载起来,等UI里开启的某个子线程运行完成后,并返回了相应的值后,才继续执行,或者是有没有相关的处理办法,我才接触安卓,不熟悉它的功能,我目前是在一个函数(准确的说应该是方法)里使用了的线程,我然后在UI里调用了这个方法,我想UI能获取这个方法的返回值,并且反这个值进行进一步的处理,最终完成我所设计的功能,谢谢楼上各位!谢谢,我看完了你给的这个链接,但是现在我需要的不是在handlemessage这个方法里对UI进行更新,也就是这句:mImageView.setImageBitmap((Bitmap) msg.obj);,我需要的是获得msg.obj这个对象,在handlmessage这个方法以外的(也就是在handler类外面的地方(可能是UI线程的其它内部类里面,或者是其方法里)),进一步的操作,修改,处理等,也就是我要在UI中获取这个图片,然后使它在整个UI中都可以使用,处理,不知道我说清楚了没有?
      

  11.   

    不好意思,我这里犯了一个错误,可能让大家没有明白,实在对不起,现在明确了,我的UI里需要获取子线程去访问网络并返回的数据才能继续执行,必须依靠访问网络的数据,才可以继续下面的功能,但是子线程是异步的,我不知道它什么时候能给我返回值,所以我这时通过handler里面,用msg.obj对UI的成员变量赋值,然后去引用这个成员变量,很有可能为空,因为它在被引用的时候,子线程有可能没有返回值回来,但我必须要依靠这个返回值才能继续UI的操作,那么请问,我该怎么处理?或者安卓是否有相关的处理机制?你们平时在处理的时候采用的是什么办法?谢谢