2

誰かがデバイスを振っているのを聞いているアクティビティ A があります。これは、ユーザーがアクティビティ B を実行している場合でも発生する可能性があります。デバイスが揺れている場合は、進行状況ダイアログを表示する必要があるため、正しいコンテキストが必要です。シェイク機能がアクティビティ A にあるthisように、コンテキストに使用するキーワードが正しくない場合があり (アクティビティ B が正しいコンテキストであると推測しているため)、ウィンドウ例外の悪いトークンのようなものを取得します...

再開します... アクティビティ B はフォアグラウンドです。ユーザーがデバイスを振る。アクティビティ A は揺れに反応して何かを表示しようとしていますが、アクティビティ A は現在フォアグラウンドではありません。現在のコンテキストとしてキーワードを使用しているアクティビティ A がthis、ウィンドウ例外の不良トークンでクラッシュすることがあります。正しく安定したコンテキストを取得するにはどうすればよいですか?

4

2 に答える 2

2

アクティビティ A のコンテキストを、グローバル シングルトンとして機能する Application クラスに保存できます。

public class ApplicationController extends Application {
   private static ApplicationController _appCtrl;
   private Context mActivityAContext;

   public static ApplicationController getAppCtrl()
   {
       return _appCtrl;
   }

   public void setContextForActivityA(Context context) 
   {
       mActivityAContext = context;
   }

   public Context getContextForActivityA()
   {
       return mActivityAContext;
   }

   public void onCreate() 
   {
       // Initialize the AppController class
       super.onCreate();
   ApplicationController._appCtrl = this;
   }

}

これで、setter メソッドでアクティビティ A のコンテキストを設定し、アプリのどこからでも取得できるようになりました。

ApplicationController.getContextForActivityA();

ただし、Activity コンテキストを他のアクティビティに渡すときは、メモリ リークに十分注意してください。リンクテキストを見る

于 2010-12-09T11:49:18.510 に答える
1

アプリケーションのライフ サイクル中にメモリ リークが発生する可能性があるため、アクティビティのコンテキストを別の場所に保存することはお勧めできません。コンテキストを別のクラスに保存すると、別のクラスがまだそのコンテキストへの参照を保持しているため、ガベージ コレクターによってアクティビティをクリーンアップすることはできません。

アクティビティとは関係なく、何らかの方法で認識コードを振るようにすることを検討する必要があります。

于 2010-12-09T12:27:21.070 に答える