gpt4 book ai didi

android - 在此特殊设置中,此类何时符合 gc 的条件

转载 作者:行者123 更新时间:2023-11-30 03:22:02 26 4
gpt4 key购买 nike

我需要测试此 IntentService 是否正在运行并创建了 static 方法 isInstanceCreated()。当您看到 true 或 false 时,它​​会返回。

我正在尝试了解会发生什么,希望您能关注我..
现在,如果:

1- 我从关于 GC 的 BroadcastReceiver 调用 isInstanceCreated()(我的想法是当 BroadcastReceiver 完成并符合 GC 条件时,IntentService 也符合 GC 条件)

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

3- 静态类方法的访问器将保存引用某物..???

4- 我知道静态最终字段是由编译器硬编码的,当访问静态最终字段时,类中的静态内容(如静态 block 和字段)永远不会加载。但是当我调用 isInstanceCreated() 时这里发生了什么,静态内容从右上角加载到右下角,正如代码中所写的那样。但是当我调用 isInstanceCreated() 时内存消耗情况如何?当我使用 Newclass.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
}

我知道这对我有用,但是 getRunningAppProcesses bad solution by Dianne Hackborn

最佳答案

要确定您的服务是否仍在运行,请查看 this question 的答案.请注意,这与您链接到的 getRunningAppProcesses 解决方案不同。

在您的类的当前实现中,isInstanceCreated() 不会告诉您服务是否正在运行;它只会告诉您 MyIntentService 的实例是否存在。如果静态成员 instance 未设置为 null(例如,在 onDestroy() 中),它将泄漏服务对象。

Now, what really happens here if:

1- I call isInstanceCreated() from a BroadcastReceiver regarding GC (my thoughts are when BroadcastReceiver finish and eligible for GC, the IntentService is also eligible for GC)

2- if I call isInstanceCreated() from Application class regarding GC (my thoughts are IntentService is GC when Android kill Application)

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

3- The accessor of the static class method will hold the reference something..???

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

4- [...] When i call isInstanceCreated() are the entire class also taking up memory [...]

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

关于android - 在此特殊设置中,此类何时符合 gc 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com