我需要测试此IntentService
是否正在运行并创建了static
方法isInstanceCreated()
。当你看到真或假时,它会返回。
我正在努力学习会发生什么,希望你能跟着我。
现在,如果真的发生在这里:
1-我从关于GC的isInstanceCreated()
致电BroadcastReceiver
(我的想法是BroadcastReceiver
完成且有资格获得GC,IntentService
也有资格获得GC)
2-如果我从isInstanceCreated()
课程中调用关于GC的Application
(当Android杀死应用程序时,我的想法是IntentService
是GC)
3-静态类方法的访问器将保存引用内容.. ???
4-我知道静态最终字段是由编译器硬编码的,当访问静态最终字段时,类中的静态内容(如静态块和字段)从不加载。但是当我调用isInstanceCreated()
时会发生什么,静态内容从上到下加载,因为它是在代码中编写的。但是当我拨打isInstanceCreated()
时,内存消耗情况如何呢?当我使用New
或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
}
我知道这对我有用,但getRunningAppProcesses bad solution by Dianne Hackborn
答案 0 :(得分:1)
要确定您的服务是否仍在投放,请查看this question的答案。请注意,这与您链接到的getRunningAppProcesses
解决方案不同。
在您班级的当前实施中,isInstanceCreated()
不会告诉您该服务是否正在运行;它只会告诉您MyIntentService
的实例是否存在。如果服务对象未设置为null(例如,在instance
中),静态成员onDestroy()
将泄漏服务对象。
现在,如果真的发生在这里:
1-我从一个关于GC的BroadcastReceiver调用isInstanceCreated()(我的想法是当BroadcastReceiver完成并且符合GC条件时,IntentService也有资格获得GC)
2-如果我从Application类调用关于GC的isInstanceCreated()(我的想法是Android杀死应用程序时IntentService是GC)
调用isInstanceCreated()
对GC资格无影响,因为它不会创建或销毁任何引用。
3-静态类方法的访问器将保存引用内容.. ???
我不知道“静态类方法”是什么意思。对MyIntentService
的引用由静态成员instance
持有。如果您将instance
设置为null,那么当服务完成运行时,MyIntentService
将符合GC条件,并且Android会删除自己的引用。
4- [...]当我调用isInstanceCreated()时,整个类也占用内存[...]
第一次引用MyIntentService
时,类加载器将类加载到内存中并为其静态成员分配内存。由于您的类中只有两个静态成员,因此内存使用率将非常低。