私のアプリができるだけ効率的に動作することを確認したいと思い、アクティビティのライフサイクルを調べています。特に、アクティビティonCreate
にボタンsetOnClickListeners
を作成します。Androidボタンリスナーのライフサイクル
私の理解から、アンドロイドはまたはonStop
の後にリソースをクリアすることができます。これは、リスナーがまだ存在するかどうかを確認し、必要に応じてonResume
に再作成する必要があることを意味しますか?
私のアプリができるだけ効率的に動作することを確認したいと思い、アクティビティのライフサイクルを調べています。特に、アクティビティonCreate
にボタンsetOnClickListeners
を作成します。Androidボタンリスナーのライフサイクル
私の理解から、アンドロイドはまたはonStop
の後にリソースをクリアすることができます。これは、リスナーがまだ存在するかどうかを確認し、必要に応じてonResume
に再作成する必要があることを意味しますか?
あなたが設定したListeners
は、自分自身がViews
である限り、リソースにはランタイムに重要なオブジェクトではなく、リソースをクリーンアップできます。しかし、Listeners
の中で参照しているものは、呼び出されたときにそこに存在しないかもしれませんので、あなたがアクセスしているオブジェクトがヌルでないかどうかを確認してください:-)
もっと洞察が必要な場合は、 Javaのgcのメカニズムは動作します:Views
の内部はActivity
ですので、Activity
がある限り安全です。何らかの理由であなたがcloseDatabase()メソッドと呼ばれることを想像し、今
/** This is hand code, it won't compile most probably ^^ **/
public class myActivity extends Activity {
private DataBase db;
private Button button;
public void onCreate(){
db = /* init db somehow */
button = (Button) findViewById(R.id.button);
button.setOnclickListener(new OnClickListener() {
public void onClick(View view) {
db.doSomething();
}
});
}
public void closeDatabase() {
db = null;
}
}
と:それは再作成されたときや、onCreate
はあなたが簡単な例を持っている。ここ
:-)再び呼び出されます。その後、ユーザーがボタンをクリックすると、アプリはNullPointerExceptionでクラッシュします。
これは当然ながら直接的な例です(つまり、コード内でdbオブジェクトをnullにしています)が、システム内で自動的に発生する可能性があります。
これは、画像Uriなどのグローバル変数を使用して何らかの理由でアプリケーションを中断した場合、実際にはnullになることを意味します。 – Dimebag
多かれ少なかれ、グローバル変数ではなくローカルフィールドを意味しています(一定の値を定義しない限り、Androidではグローバル変数は使用しないでください)。私は答えに例を追加します:-) – Kelevandos
私のアプリは複数のアクティビティを通して1つの画像を処理することに依存しているので興味深いです。私はそのウリを複数の方法で必要としていたので、他の活動を処理する意図を持っている。 – Dimebag
なぜあなたはアンドロイド(gc)がリスナーをきれいにすると思いますか? 'onDestroy'アクティビティにはまだボタン上のリンクがあり、リスナ上のリンクがあります。 –