KwaiAppTeam / KOOM

KOOM is an OOM killer on mobile platform by Kwai.
Other
3.19k stars 424 forks source link

被线程池的线程所持有的Activity对象泄露了没有gcpath相关信息 #178

Open Andyload opened 2 years ago

Andyload commented 2 years ago

直接在项目的master分支上运行,并且在koom-demo工程代码的基础上修改了一些代码,如下:

public static class LeakedActivity extends AppCompatActivity {

    ExecutorService executors = Executors.newSingleThreadExecutor();
    static List<Activity> uselessObjectList;

    public static void setUselessObjectList(List<Activity> activities) {
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        executors.execute(() -> {
            while (true) {
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.e("LeakedActivity", "onCreate");
            }
        });
        this.finish();
    }

}

只是把LeakdActivity原来由静态变量持有,改成线程池执行任务(内部类持有LeakdActivity对象)

最后生成的json文件没有关于LeakdActivity泄露的gcpath,试了红米note4x和iqoo neo5都是这样,应该所有手机都是这样

如果换成Thread的方式又可以获取LeakdActivity泄露的gcpath,这究竟是为什么呢?