这是一个视图寻呼机适配器。 我想知道我是否在那里使用匿名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
答案 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适用于查找内存泄漏,并且非常易于使用。
(我无法发表评论所以我不得不发布这个答案:()