Android:正确的方法将消息从后台线程传递到UI线程?

Android:正确的方法将消息从后台线程传递到UI线程?,第1张

概述我一直在阅读很多关于线程,处理程序,loopers等的内容,我很困惑.在我的应用程序中,我希望第一个Activity启动后台工作程序.此后台工作程序将不断地从TCP套接字请求数据,并且(希望)在数据到达时将新信息发布到UI线程.如果用户转换到新的Activity,则后台需要继续执行该 *** 作,但只向UI线程发送不同的消息,以便相应地更新新布局.这是我到目前为止.

我一直在阅读很多关于线程,处理程序,loopers等的内容,我很困惑.在我的应用程序中,我希望第一个Activity启动后台工作程序.此后台工作程序将不断地从TCP套接字请求数据,并且(希望)在数据到达时将新信息发布到UI线程.如果用户转换到新的Activity,则后台需要继续执行该 *** 作,但只向UI线程发送不同的消息,以便相应地更新新布局.

这是我到目前为止…这是我的主要活动文件

public class MyTCPTest extends Activity {    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // set the layout        setContentVIEw(R.layout.main);        // create a handler to handle messages from bg thread        Handler handler = new Handler();        BgWorkerThread bgw = new BgWorkerThread();        bgw.start(); }@H_403_9@

在另一个文件中我定义我的后台工作线程如下…

public class BgWorkerThread extends Thread {    @OverrIDepublic voID run(){    while(true)    {        try {        // simulate a delay (send request for data,receive and interpret response)         sleep(1000);                    // How do I send data here to the UI thread?        } catch (InterruptedException e) {            e.printstacktrace();        }    }} @H_403_9@

如果UI切换到不同的Activity,这个线程会继续运行吗?此外,该线程如何知道将消息发送到哪个活动?显然,我希望它始终将数据发送到当前活动的Activity.这会自动发生吗?

最后,当UI切换到不同的活动时,需要通知bgworker,以便它可以开始请求与新Activity布局相关的数据.告知工人改变的最佳方法是什么?难道我不能在BgWorkerThread类中创建一个可在活动加载时调用的公共方法吗?

最佳答案我已经在下面的SO Question中说明了相同的代码和更详细的步骤.总而言之,为了通知您的UI并为其提供不同的上下文,我建议如下:

>有一个将requestID映射到Handler的地图(假设您有请求ID的上下文).您可以在Activity中注册适当的Handler,因此您可以让处理程序对每个Activity的行为有所不同(例如,当它从服务器收到响应时更新各种UI元素)
>更改为AsyncTask for Threading Model,因为它具有onProgressUpdate方法,可以更容易编码,以便从后台线程通知UI线程

这是BackgroundThread的存根/伪代码

public class ResponseHandler extends AsyncTask          总结       

以上是内存溢出为你收集整理的Android:正确的方法将消息从后台线程传递到UI线程?全部内容,希望文章能够帮你解决Android:正确的方法将消息从后台线程传递到UI线程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1139855.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)