これは不安な質問だと思いますが、私は適切な課題を構成することさえできません!ここで私は、Androidの下でやろうとしているものです:UI関連オブジェクトはどれくらいの期間使用可能ですか?
ここpublic void onCreate(Bundle savedInstance) {
...
AskFilename ask = new AskFilename();
...
}
、AskFilename
クラスは、ユーザーがファイル名を入力できるようにするユーザ・インタフェースを提示します。ただし、onCreate()
メソッドが返されると、ask
オブジェクトは有効範囲外になります。これは、ask
への参照がなくなることを意味します(AskFilename
クラス内で、他の変数にポインタを割り当てませんでした)ので、GCは遅かれ早かれそれを "収集"します。これが発生した場合、ユーザがダイアログボックスをOKにしていないと、AskFilename
のコードはすでに使用できなくなり、システムがクラッシュします。私の理解は正しいのですか?
(私はGCをどのようにして仕事をさせるかわからないので、このアイデアで実験する方法は考えられません.GCが望むときだけGCが始まるようです! )それは仕事をしますか?
上記が正しい場合、UI関連オブジェクトを新規作成する適切な方法は何ですか?私はAskFilename
静的にevrythingすることができますか、または私はask
静的な移植可能なことができ、それが完了したらnullに割り当てることができます。しかし、他の方法はありますか?あるいは、アイデアそのものがまず悪いですか?
(AskFilenameがMyActivite.AskFilename気に入りましたか?活動の「内部」クラスであれば、それはすべての違いを生むん。)
事前にありがとうございます。
ありがとうございます!はい、あなたが言ったように、私はコンストラクタのActivityへの参照が必要です。議論のために、これは、すべてのUIビューAskFilenameがアクティビティへの参照を作成し、AskFilenameを持たないことを保証するだけです。つまり、この場合、AskFilenameはまだ孤立しています(あなたが提案したアクティビティのクラスメンバーに「質問」していないとすれば、私にとってはうまくいきます)。私は正しい? – wwyt
おそらく実際には、setContentViewを呼び出して(何らかの形で)、既存のレイアウトにアタッチしたり、ダイアログとして作成して表示させたりすると、画面に表示させることができます。オブジェクトへの参照。 – Jems