android – 为什么我的Thread会冻结UI-Thread?

android – 为什么我的Thread会冻结UI-Thread?,第1张

概述我弄清楚了. 出于某种原因,这个线程的代码实际上是在UI线程上运行的. 如果我突破它,UI就会停止.或者睡觉吧,UI停了.因此,在“ui”线程中不允许网络活动. 我没有使用过异步任务,因为我不知道循环它的正确方法. (在onPostExecute中调用它的新实例似乎是不好的做法,并且好像异步是针对一个关闭的任务. 我扩展了Thread. public class SyncManager exte 我弄清楚了.

出于某种原因,这个线程的代码实际上是在UI线程上运行的.
如果我突破它,UI就会停止.或者睡觉吧,UI停了.因此,在“ui”线程中不允许网络活动.

我没有使用过异步任务,因为我不知道循环它的正确方法. (在onPostExecute中调用它的新实例似乎是不好的做法,并且好像异步是针对一个关闭的任务.

我扩展了Thread.

public class SyncManager  extends Thread {public SyncManager(Context context){    sdb = new SyncManagerDBHelper(context);    mContext = context;     }@OverrIDepublic voID run() {         while(State == RUNNING) {        try{            SyncRecords();   // Break point here = UI freeze.        } catch (Exception e) {            e.printstacktrace();        }        try {            Thread.sleep(10000); // So also causes UI freeze.        } catch (InterruptedException e) {            e.printstacktrace();        }    }} public voID startThread() {    Log.i("SyncManager","start called");    if((State == PAUSED || State == StopPED) && !this.isAlive() )    {        State = RUNNING;        run();          }   }

来自我的活动我打电话

sm = new SyncManager(this);  sm.startThread();
解决方法 您应该使用Thread.start()来启动任何新线程.
据我所知,直接调用run()不会导致系统实际启动新线程,因此阻塞UI.

将您的startThread()方法更改为以下内容,然后它应该工作:

public class SyncManager extends Thread {    public voID startThread() {        if((State == PAUSED || State == StopPED) && !this.isAlive()) {            State = RUNNING;            start();  // use start() instead of run()        }       }}

Read here获取Java重访博客的更多具体信息.

总结

以上是内存溢出为你收集整理的android – 为什么我的Thread会冻结UI-Thread?全部内容,希望文章能够帮你解决android – 为什么我的Thread会冻结UI-Thread?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1123483.html

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

发表评论

登录后才能评论

评论列表(0条)

保存