0

MainActivity から開始したサービスがあります。

    Intent intent = new Intent(getBaseContext(), MyService.class);
    getBaseContext().startService(intent); 

MyService 内で、スレッドを作成して開始し、サービスのコンテキストへの参照を与えます。

    mThread = new MyThread(this);
    mThread.start();

次に、スレッド内に ProgressDialog を表示します。私はこれを試しました:

           mProgressDialog = ProgressDialog.show(mContext,
             "", "Receiving file...", true);
             mProgressDialog.show();

しかし、「RuntimeException: Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません」というメッセージが表示されます。これは理にかなっているので、代わりにこれを試しました:

            HandlerThread progressHandlerThread = new HandlerThread(
                    "ProgressHandlerThread");
            progressHandlerThread.start();

            Handler progressHandler = new Handler(
                    progressHandlerThread.getLooper());
            progressHandler.post(new Runnable()
            {
                @Override
                public void run()
                {
                    mProgressDialog = ProgressDialog.show(mContext, "",
                            "Receiving file...", true);
                    mProgressDialog.show();
                }
            });

しかし、「BadTokenException: Unable to add window token is not for an application」が表示されますが、そのエラーの意味がわかりません。

私はこれを見ました:サービス内のスレッドから ProgressDialog を表示する

結論は、私はrunOnUIThreadを実行する必要があるということですが、サービスにいるので、それを行うためのアクティビティへの参照がありません。誰でもこの BadTokenException を説明し、これを行う良い方法を提案できますか?

4

3 に答える 3

1
于 2013-10-08T17:09:34.083 に答える