UI线程冻结

时间:2012-11-01 06:01:05

标签: java android multithreading

我正在使用以下函数创建一个新线程。

public void toCallAsynchronous() {
    mThread = new Thread() {
        public void run() {
            while (true) {
                try {
                    // do something here
                    if(mLoggedIn)
                    {
                        boolean syncresult = mDownload.syncData();
                    }
                    Log.d(TAG, "local Thread sleeping");
                    Thread.sleep(10000);
                    //mHandler.postDelayed(this, 1000);
                } catch (InterruptedException e) {
                    Log.e(TAG, "local Thread error", e);
                }
            }
        }
    };
    mThread.start();
}

我在onResume中调用它,因为我希望只有当用户登录到他的帐户时才启动此线程。 synData函数访问服务器以获取新文件,下载它们并将条目更新到数据库中。你能否明白我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

while(true)很奇怪,因为你可能不希望这个线程永远运行。至少它应该是while(!isFinishing())

此外,您还需要确保mDownload.syncData不会尝试访问任何用户界面,如果有,则会出现例外情况。