getActivity()のAndroidソリューションをnullに



Android Solutions Getactivity Null



Android開発()がnullになっているように見えるときにgetActivityが表示される場合があります。LEDプログラムがnullポインター例外を報告した場合、解決方法が変更されました。



序文

毎日の開発では、ViewPager+Fragmentビューのスライド、特定の部分でコンテキストロジックを使用することがよくありますContext(基本Toastなど)が必要ですが、FragmentただしがみつくActivity現在を取得する必要がある場合は、試行のコンテナActivityコンテキストContext合格する必要がありますgetActivity()取得します。



ただし、プログラムの類人猿に出くわしたことがないかどうかはわかりません。getActivity()を使用すると、nullnullポインタ例外が報告されたときにプログラムが発生します。

実際、理由は次の理由で私たちに帰することができます:

(A)スイッチがフラグメント化すると、頻繁にクラッシュします



(B)システムメモリが不足しています

時間(3)水平および垂直スクリーンスイッチ

...。

上記の結果、Activityシステムは回復しますが、fragmentライフサイクルが終了しないためActiivty回復してリサイクルされるため、getActivity()nullの問題が発生します。

解決する

私たちは3つの解決策を考え出しました:

(A)参照コンテキストの確立

まず、Fragmentライフサイクルを確認します:

In Fragmentライフサイクル、ライフサイクルin onAttach() with onDetach()しばらくの間getActivity()メソッドは戻りませんnull。したがって、fragment設立の初期化Context参照を行うことができます。

in fragment参照の破壊が破壊されたとき。

コードは次のように表示されます。

1 2 3 4 5 6 7 8 9 10 11 @Override public void onAttach(Activity activity) {super .onAttach(activity)mCtx = activity // mCtx is a member variable, context reference }@Overridepublic void onDetach() {super .onDetach()mCtx = null}

(B)getapplicationcontextの合理的な使用()

プロセスに一時変数を格納するために使用されますContextコンテキスト参照は問題をある程度解決できます。 Androidでは、ApplicationServiceActivityコンテキストがあるため、getapplicationcontext()プログラムが閉じない限り、グローバルコンテキストを取得できますcontext難しいnull

(C)アプリケーションをカスタマイズする

3番目の方法は、実際には2番目の方法の基本原則である次のカスタムapplication一時ストレージ内application独自のコンテキストContextと同じです。その過程で、単純なインタレストアクセスによってapplication取得コンテキストContext

具体的な用途は次のとおりです。

(1)アプリケーションを構成リストに登録する

1 2 3 4 android:name= '.MyApplication'android:icon= '@drawable/ic_launcher'android:label= '@string/app_name' >

(2)コンテキストに保存されたonCreateアプリケーションを作成し、単一のインタレストを作成します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class MyApplication extends Application {private static MyApplication instance@Overridepublic void onCreate() {super .onCreate()instance = this// store references}public static MyApplication getInstance(){return instance} }

総括する

ここに私の要約アプローチのほんの一部があります、もちろん、他の開発者がより良い提案を提案することができます、それはより良いです。私たちが一緒に進歩するように、みんなと共有するテクノロジー!

あなたも記事に興味があるかもしれません:

元のリンク:http://www.jianshu.com/p/9d75e328f1de