0

次の関数を使用して新しいスレッドを作成しています。

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関数は、サーバーにアクセスして新しいファイルを探し、それらをダウンロードして、データベースへのエントリを更新します。ここで私が間違っていることを特定していただけますか?

4

1 に答える 1

2

while(true)おそらく、このスレッドを永遠に実行したくないので、奇妙です。少なくともそうあるべきだwhile(!isFinishing())

またmDownload.syncData、どの UI にもアクセスしようとしないことを確認する必要があります。アクセスしようとすると、例外が発生します。

于 2012-11-01T06:12:03.770 に答える