Android 在这个特殊设置中,这个类什么时候有资格使用gc
我需要测试此Android 在这个特殊设置中,这个类什么时候有资格使用gc,android,static,garbage-collection,lifecycle,intentservice,Android,Static,Garbage Collection,Lifecycle,Intentservice,我需要测试此IntentService是否正在运行,是否创建了static方法isInstanceCreated()。它会在你看到真或假时返回 我正在努力了解发生了什么,希望你能跟我来。 现在,如果: 1-我从BroadcastReceiver调用有关GC的isInstanceCreated() (我的想法是当BroadcastReceiver完成并符合GC条件时,IntentService也符合GC条件) 2-如果我调用isInstanceCreated()来自Application类 (我的
IntentService
是否正在运行,是否创建了static
方法isInstanceCreated()
。它会在你看到真或假时返回
我正在努力了解发生了什么,希望你能跟我来。现在,如果: 1-我从
BroadcastReceiver
调用有关GC的isInstanceCreated()
(我的想法是当BroadcastReceiver
完成并符合GC条件时,IntentService
也符合GC条件)
2-如果我调用isInstanceCreated()
来自Application
类
(我的想法是,IntentService
Android kill应用程序时是GC)
3-静态类方法的访问器将保存引用
4-我知道静态最终字段是由编译器硬编码的,当访问静态最终字段时,类中的静态内容(如静态块和字段)永远不会加载。但是当我调用isInstanceCreated()
时,这里会发生什么呢?静态内容是从右上到右下加载的,就像在代码中编写的一样。但是,当我调用isInstanceCreated()
时,内存消耗会怎样呢。当我用New
或class.forname
实例化类时,将创建实例并为右侧的hole类分配内存。当我调用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
}
我知道这对我很有效,但要确定您的服务是否仍在运行,请查看以下问题的答案。请注意,这与链接到的
GetRunningAppProcess
解决方案不同
在类的当前实现中,isInstanceCreated()
不会告诉您服务是否正在运行;它只告诉您是否存在MyIntentService
的实例。如果服务对象未设置为null(例如,在onDestroy()
中),静态成员实例将泄漏服务对象
现在,如果:
1-我从BroadcastReceiver调用isInstanceCreated()来处理GC(我的想法是当BroadcastReceiver完成并符合GC条件时,IntentService也符合GC条件)
2-如果我从应用程序类调用isInstanceCreated()来处理GC(我的想法是,当Android杀死应用程序时,IntentService就是GC)
调用isInstanceCreated()
对GC资格没有影响,因为它不会创建或销毁任何引用
3-静态类方法的访问器将保存引用
我不知道你所说的“静态类方法”是什么意思。对MyIntentService
的引用由静态成员实例
持有。如果将instance
设置为null,则当服务完成运行且Android删除其自身引用时,MyIntentService
将符合GC条件
4-[…]调用isInstanceCreated()时,整个类是否也占用内存[…]
当您第一次引用MyIntentService
时,类加载器将类加载到内存中,并为其静态成员分配内存。由于您的类中只有两个静态成员,因此内存使用率将非常低。要确定您的服务是否仍在运行,请查看以下问题的答案。请注意,这与链接到的GetRunningAppProcess
解决方案不同
在类的当前实现中,isInstanceCreated()
不会告诉您服务是否正在运行;它只告诉您是否存在MyIntentService
的实例。如果服务对象未设置为null(例如,在onDestroy()
中),静态成员实例将泄漏服务对象
现在,如果:
1-我从BroadcastReceiver调用isInstanceCreated()来处理GC(我的想法是当BroadcastReceiver完成并符合GC条件时,IntentService也符合GC条件)
2-如果我从应用程序类调用isInstanceCreated()来处理GC(我的想法是,当Android杀死应用程序时,IntentService就是GC)
调用isInstanceCreated()
对GC资格没有影响,因为它不会创建或销毁任何引用
3-静态类方法的访问器将保存引用
我不知道你所说的“静态类方法”是什么意思。对MyIntentService
的引用由静态成员实例
持有。如果将instance
设置为null,则当服务完成运行且Android删除其自身引用时,MyIntentService
将符合GC条件
4-[…]调用isInstanceCreated()时,整个类是否也占用内存[…]
当您第一次引用MyIntentService
时,类加载器将类加载到内存中,并为其静态成员分配内存。由于您的类中只有两个静态成员,因此内存使用率将非常低。因此,当我调用isInstanceCreated()
时,类加载器会将静态成员放在中,直到我的应用程序被杀死为止,它们不会被删除getRunningServices
是我现在使用的,但是当我调用isInstanceCreated()
类加载器将静态成员放在中,并且在我的应用程序被杀死之前,它们不会被删除getRunningServices
是我现在使用的,但我想离开它