出于某种原因,这个线程的代码实际上是在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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)