1

我需要测试它是否IntentService正在运行并创建了static方法isInstanceCreated()。它会在您看到真假时返回。

我正在努力了解会发生什么希望你能关注我。
现在,如果:

1-我isInstanceCreated()从一个BroadcastReceiver关于 GC 的电话(我的想法是BroadcastReceiver完成并有资格获得 GC,IntentService也有资格获得 GC)

2-如果我isInstanceCreated()Application课堂上打电话给GC(我的想法是IntentServiceAndroid杀死应用程序时的GC)

3-静态类方法的访问器将持有引用的东西..???

4-我知道静态最终字段是由编译器硬编码的,并且在访问静态最终字段时,类中的静态内容(如静态块和字段)永远不会加载。但是当我调用时,这里会发生什么isInstanceCreated(),静态的东西是从右上角加载到右下角的,因为它是写在代码中的。但是当我调用isInstanceCreated(). 当我用Neworclass.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(例如 in onDestroy()) ,静态成员将泄漏服务对象。

现在,如果:

1-我从 BroadcastReceiver 调用 isInstanceCreated() 关于 GC (我的想法是当 BroadcastReceiver 完成并有资格获得 GC 时,IntentService 也有资格获得 GC)

2-如果我从有关 GC 的 Application 类中调用 isInstanceCreated() (我的想法是 IntentService 在 Android 杀死应用程序时是 GC)

调用isInstanceCreated()对 GC 资格没有影响,因为它不会创建或销毁任何引用。

3-静态类方法的访问器将持有引用的东西..???

我不知道您所说的“静态类方法”是什么意思。对的引用MyIntentService由静态成员持有instance。如果您设置instance为 null,那么MyIntentService当服务完成运行并且 Android 删除它自己对它的引用时,将符合 GC 条件。

4- [...] 当我调用 isInstanceCreated() 时,整个班级也占用了内存 [...]

当您第一次引用MyIntentService时,类加载器将类加载到内存中并为其静态成员分配内存。由于您的类中只有两个静态成员,因此内存使用量将非常低。

于 2013-09-24T01:30:45.043 回答