1

これが実行されているかどうかをテストし、メソッドIntentServiceを作成する必要があります。true または false のように返されます。 staticisInstanceCreated()

私は何が起こるかを学ぼうとしています.あなたが私に従ってくれることを願っています
..

1- 私は GC に関して呼び出しますisInstanceCreated()(BroadcastReceiver私の考えでは、BroadcastReceiver終了して GC の資格がある場合、IntentServiceも GC の資格があります)。

isInstanceCreated()2-GCに関してクラスから呼び出す場合Application(私の考えはIntentService、Androidがアプリケーションを殺すときのGCです)

3- 静的クラス メソッドのアクセサは参照何かを保持します..???

4-静的最終フィールドはコンパイラによってハードコーディングされており、静的最終フィールドにアクセスするときに、静的ブロックやフィールドなどのクラス内の静的なものが読み込まれないことを知っています。しかし、ここで を呼び出すとどうなるかというとisInstanceCreated()、コードに書かれているように、静的な要素は上から右下に読み込まれます。しかし、 を呼び出すときのメモリ消費はどうでしょうかisInstanceCreated()Neworを使用してクラスをインスタンス化するclass.fornameと、インスタンスが作成され、ホールクラスにメモリが割り当てられます。私が呼び出すisInstanceCreated()と、クラス全体もメモリを占有します(最初にインスタンス化する必要があるため、もちろん非静的なものには誰もアクセスできません)。あなたが私の学習曲線に従って、何らかの答えを出してくれることを願っています。

public class MyIntentService extends IntentService {
    private static boolean stopNow; 
    private Integer someInt = 10;
    private static MyIntentService instance = null;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public MyIntentService() {
        super("MyIntentService");
    }

    public static boolean isInstanceCreated(){
        return instance != null;
    }

    @Override
    protected void onHandleIntent(Intent intent) {

    }
    public boolean someMethod(){

    {
    // much more methods
}

私はこれがうまくいくことを知っていますが、Dianne Hackborn による getRunningAppProcesses の悪い解決策

4

1 に答える 1

1

サービスがまだ実行されているかどうかを判断するには、この質問への回答をご覧ください。getRunningAppProcessesこれは、リンク先のソリューションとは異なることに注意してください。

クラスの現在の実装ではisInstanceCreated()、サービスが実行されているかどうかはわかりません。MyIntentServiceのインスタンスが存在するかどうかのみを示します。静的メンバーinstanceは、null に設定されていない場合 (たとえばonDestroy())、サービス オブジェクトをリークします。

さて、ここで実際に何が起こるか:

1- GC に関して BroadcastReceiver から isInstanceCreated() を呼び出します (私の考えでは、BroadcastReceiver が終了して GC の資格がある場合、IntentService も GC の資格があります)。

2- GC に関して Application クラスから isInstanceCreated() を呼び出した場合 (私の考えでは、Android がアプリケーションを殺すと IntentService は GC です)

呼び出しisInstanceCreated()は参照を作成または破棄しないため、GC の適格性には影響しません。

3- 静的クラス メソッドのアクセサは参照何かを保持します..???

「静的クラスメソッド」の意味がわかりません。への参照MyIntentServiceは静的メンバーによって保持されますinstanceinstancenull に設定するMyIntentServiceと、サービスの実行が終了し、Android がサービスへの独自の参照を削除すると、GC の対象になります。

4- [...] isInstanceCreated() を呼び出すと、クラス全体もメモリを消費します [...]

初めて参照MyIntentServiceするとき、クラス ローダーはクラスをメモリにロードし、その静的メンバーにメモリを割り当てます。クラスには静的メンバーが 2 つしかないため、メモリ使用量は非常に少なくなります。

于 2013-09-24T01:30:45.043 に答える