首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在while循环中从Android-AsyncTask更新UI-Thread

在while循环中从Android-AsyncTask更新UI-Thread
EN

Stack Overflow用户
提问于 2016-10-17 11:11:59
回答 1查看 475关注 0票数 0

我在AsyncTask中使用了while循环。程序正在等待套接字请求,如

代码语言:javascript
运行
复制
while(true) {
  in = readLine();
...
}

如何从AsyncTask的这个循环更新主UI。通常情况下,更新主线程是被禁止的,而且在doPostExecute中这样做并不能解决问题,因为这样我就不得不离开while循环。

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 06:32:52

实现这一点的一种方法是在循环中的某个地方调用publishProgress(object)。这反过来调用方法onProgressUpdate(Object[]),您可以在该方法中更新主线程中的视图。

在下面的示例中,mTextView是AsyncTask所在类的成员变量。例如。

代码语言:javascript
运行
复制
public class NewtworkActivity extends AppCompatActivity {
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.text_view);
        ....
    }

    private class MySyncTask extends AsyncTask {
        ....
        @Override
        protected Object doInBackground(Object[] objects) {
            ....
            while (true) {
                while ((lineFromServer = mFromServer.readLine()) != null) {
                    Object object[] = { lineFromServer };
                    publishProgress(object);
                }
             }
        }

        ....

        @Override
        protected void onProgressUpdate(Object[] values) {
            super.onProgressUpdate(values);
            if (values.length > 0) {
                mTextView.append(values[0]+System.getProperty("line.separator"));
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40077951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档