【发布时间】:2018-10-15 23:12:55
【问题描述】:
所以,我经常听到“坚持静态活动或视图,尤其是在长时间运行的 AsyncTask 中会导致内存泄漏并使您的应用程序崩溃”。
但是,我未能在 Android 模拟器中实际证明这一点。
我做错了什么?
public class MainActivity extends AppCompatActivity {
static TextView label;
static List<Activity> sHolder = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewGroup vg = findViewById(R.id.blah);
for (int i=0; i<1000000; i++) {
ImageView im = new ImageView(this);
im.setImageDrawable(getApplicationContext().getDrawable(R.drawable.kitten_original));
vg.addView(im);
new MyTask(this).execute();
}
sHolder.add(this);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
class MyTask extends AsyncTask<Void, Void, Void> {
Activity activity;
public MyTask(Activity activity) {
this.activity = activity;
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
不是每次崩溃,我的电脑只是开始有点滞后,并且一直看到 100 MB 的垃圾收集发生。
我如何才能真正强制应用程序崩溃? (请不要问我为什么要强制应用崩溃,我正在做一些极限测试)
【问题讨论】:
-
您的活动基本上是空的,因此当您泄漏它时,需要多次重复才能导致崩溃。如果它有一些内容/引用其他异步任务/布局,它会更快崩溃。
标签: android android-activity memory-management android-memory