我在这里创建内存泄漏吗?

时间:2015-09-11 13:36:24

标签: java android memory-leaks

这是一个视图寻呼机适配器。 我想知道我是否在那里使用匿名Runnables和TimerTasks创建内存泄漏

@Override
    public Object instantiateItem(ViewGroup container, final int position) {

        final ImageView imageView = new ImageView(activity);

        imageView.setImageResource(slides[position].getStateOneResource());
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        animate(imageView, slides[position].getAllStates(), 0, false);
                    }
                });
            }
        }, 1000);

        ((ViewPager) container).addView(imageView, 0);
        return imageView;
    } // End of instantiateItem

3 个答案:

答案 0 :(得分:1)

如果您有任何疑问,请多次运行此操作,并在每次运行时拍摄内存快照。您可以在设备上启用一个选项,在屏幕上显示正在使用的内存量。

修改:看一下这个链接:https://developer.android.com/tools/debugging/debugging-memory.html

答案 1 :(得分:1)

我不确定你是否在创建内存泄漏,但我认为最好使用容器的Context。

像这样:

final ImageView imageView = new ImageView(container.getContext());

用于在主线程上运行延迟操作:

Handler mainHandler = new Handler(container.getContext().getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {
       animate(imageView, slides[position].getAllStates(), 0, false);
    } 
};
mainHandler.postDelayed(myRunnable, 1000);

答案 2 :(得分:1)

LeakCanary适用于查找内存泄漏,并且非常易于使用。

(我无法发表评论所以我不得不发布这个答案:()