アプリケーションに異なるクラス ファイルがあります。5 つのクラスがあり、そのうち 2 つがアクティビティで、1 つが実行中のサービスです。残りの 2 つは単なるクラスです。これら 2 つのクラスの変数の有効期間はどれくらいですか。アクティビティが OS によって強制終了される可能性があることはわかっているため、アクティビティが強制終了されたときにサービス内のアクティビティの変数を使用することはできません。アクティビティでもサービスでもない、アプリケーションの存続期間中にいつでも他の 2 つのクラス ファイルの変数を使用できますか?
4 に答える
これらの変数を使用できます。変数を静的にすると、アクティビティまたはサービスで行われた値の変更が保持されます。それ以外の場合は、アクティビティまたはサービス クラスでこれらのクラス変数のオブジェクトを作成できます (アクティビティまたはサービスごとに変数の個別のインスタンスが必要な場合)。
アプリケーションの存続期間中に参照したいオブジェクトがある場合は、それらをアプリケーション コンテキストに格納することをお勧めします。次のいずれかの方法で、アプリケーション コンテキストへの参照を取得できます。
Context#getApplicationContext()
マニフェストで、使用するカスタム Application クラスを定義します。これを確認してください
次に、アプリケーションの onCreate メソッドで必要なオブジェクトを作成し、他の Android コンポーネントが使用する getter を提供します。
The other 2 are just classes. What is the lifetime of the variables in these 2 classes.
変数がインスタンス変数の静的であるかどうかによって異なります
static の場合: クラスが最初にロードされたときにロールに入ります。
if instance : そのクラスのインスタンスを作成した場所と、そのインスタンスのスコープは何かによって異なります
so i wont be able to use the variables of the activities in the service when the activity is killed.
はい、アクティビティが強制終了されると、その変数のアクティビティもクリアされます。
Can I use the variables in the other 2 class files anytime during the lifetime of the application, which are neither activities nor services?
アプリケーションの有効期間を次のように使用できます
1- make them static
2- or if they are not static declare them in application file of you project.
クラスは、別のクラス、アクティビティ、またはサービスが参照を保持している限り存在します。アクティビティにクラスへの参照がある場合、アクティビティが破棄されるとクラスはなくなります。サービスも同じ。残念ながら、Android では、あるアクティビティから別のアクティビティに pojo (いわゆる「通常のクラス」) への参照を渡す方法がないため、クラスを簡単に維持することはできません。
私は RoboGuice を使用しており、pojo の Injectable Roboguice クラスを作成することで、アクティビティとサービスから同じオブジェクトを参照できます。それらがシングルトンの場合は、アプリが実行されている限り存続します。