0

Android アプリケーションのバックグラウンド プロセッサとして実行される次のコードがあるとします。

public class Background extends Service 
{
    public void popup (String message, int duration)
    {
        Toast.makeText(this, message, duration).show();
    }

    class BackgroundChecker extends TimerTask 
    {
        public void run()
        {
            popup("Message!", Toast.LENGTH_LONG); // here
        }
    }
}

ポップアップ メッセージ、つまり // ここに到達すると、Android は強制終了するように指示します。問題はコンテキストthis、つまり . これがなぜ起こっているのか、そしてそれを修正する方法を理解するのを手伝ってもらえますか? ちなみに、代わりにthis私も使用getApplicationContext()しましたが、それでもクラッシュします =(.

ありがとうございました。

4

1 に答える 1

1

私はこれを試したことはありませんが、Service はバックグラウンド アクティビティであるため、トーストを実行するにはコンテキストが機能しないように思われるため、サービスにアクティビティにトーストを実行させることはどうでしょうか。

他に試すことができるのは、Application クラスを拡張し、そこにトースト ジェネレーターを配置してから、サービス コールから実行することです。

ApplicationExtender variableName = (ApplicationExtender) Background.this.getApplication();              
variableName.toast("message");

あなたの ApplicationExtender:

public class ApplicationExtender extends Application {

    public void toast(String message){
    Toast.makeText(super.getApplicationContext(),message,Toast.LENGTH_LONG).show();
    }

}

機能させるには、拡張クラスをマニフェストに追加する必要があります。

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".ApplicationExtender">

これが機能することを保証することはできません。試したことはありません。

于 2010-10-26T14:28:59.510 に答える