忙しくて、なかなか更新できませんでした。
前回メモリリークを調査した結果、検出した内容です。
今回は、単純なコーディングミスです。
Staticな変数に、Contextを渡したクラスのインスタンスを保持しているのですが、ContextにActivityをキャストしたContextを渡していました。
ソースで説明します。
1 2 3 4 5 6 7 8 9 | public class MyToast { private static Toast mToast = null ; public static void showToast(Context context, String message) { cancelToast(); mToast = Toast.makeText(context, message, Toast.LENGTH_SHORT); mToast.show(); } } |
ToastクラスのインスタンスをContextを渡して作成し、Staticな変数で保持しています。
上記のshowToastを以下のように呼び出していたのです。
1 | MyToast.showToast( this , "message" ); |
上記の例は、Activityで呼び出していたので、thisは、Activityです。
Contextは、ApplicationかActivityをと書かれていますので、以下のように変更したら、メモリリークはなくなりました。
1 2 3 4 5 6 7 8 9 | public class MyToast { private static Toast mToast = null ; public static void showToast(Context context, String message) { cancelToast(); mToast = Toast.makeText(context.getApplicationContext(), message, Toast.LENGTH_SHORT); mToast.show(); } } |
Staticな変数は、要注意です。
0 件のコメント:
コメントを投稿