如何彻底杀死activity?全部清除
How to completely kill the activity? clear all
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyTimer();
}
//Таймер заставки в 3 секунды.
private void MyTimer() {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int t = 3;
@Override
public void run() {
if (t == 0) {
timer.cancel();
startActivity(new Intent(getApplicationContext(), Authors.class));
runOnUiThread(new Runnable() {
@Override
public void run() {
((ImageView)findViewById(R.id.imageViewMain)).setImageDrawable(null);
((ImageView)findViewById(R.id.imageViewMain)).destroyDrawingCache();
}
});
}
t--;
}
}, 0, 1000);
}
@Override
protected void onPause() {
super.onPause();
finish();
}
书中,完成后并没有从图片中释放内存。
图片较大,需要清理一下
查看"memory monitor"中的IDEA Intelljj。
尺寸不同:
- 运行,内存大小 21mb
- 运行,内存大小 28mb
- 运行,内存大小 28mb
- 运行,内存大小 21mb
- 运行,内存大小 21mb
运行一个activity
为什么会这样?
以及如何彻底杀死activity?
发生这种情况是因为您正在泄漏 Activity
。匿名内部 Runnable
将持有您的 Activity
的强引用,直到所有 Timers
都被处理。反过来,MessageQueue
(Android class)将持有您的 Runnable
的引用,直到它被处理。
查看此 post 了解更多信息。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyTimer();
}
//Таймер заставки в 3 секунды.
private void MyTimer() {
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int t = 3;
@Override
public void run() {
if (t == 0) {
timer.cancel();
startActivity(new Intent(getApplicationContext(), Authors.class));
runOnUiThread(new Runnable() {
@Override
public void run() {
((ImageView)findViewById(R.id.imageViewMain)).setImageDrawable(null);
((ImageView)findViewById(R.id.imageViewMain)).destroyDrawingCache();
}
});
}
t--;
}
}, 0, 1000);
}
@Override
protected void onPause() {
super.onPause();
finish();
}
书中,完成后并没有从图片中释放内存。
图片较大,需要清理一下
查看"memory monitor"中的IDEA Intelljj。
尺寸不同:
- 运行,内存大小 21mb
- 运行,内存大小 28mb
- 运行,内存大小 28mb
- 运行,内存大小 21mb
- 运行,内存大小 21mb
运行一个activity
为什么会这样? 以及如何彻底杀死activity?
发生这种情况是因为您正在泄漏 Activity
。匿名内部 Runnable
将持有您的 Activity
的强引用,直到所有 Timers
都被处理。反过来,MessageQueue
(Android class)将持有您的 Runnable
的引用,直到它被处理。
查看此 post 了解更多信息。