android - 处理程序和可运行泄漏
问题描述
在我的主要启动活动中,我有一个调用 runnable 的处理程序,它会延迟下一个活动的启动。我已经删除了我的静态引用,但我知道我的处理程序导致了内存泄漏。
public class MainSplashActivity extends AppCompatActivity {
private int SPLASH_TIME_OUT = 5000;
private TextView heyDj;
private ImageView spinninRecords;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
heyDj = (TextView) findViewById(R.id.hey_dj_intro);
spinninRecords = (ImageView) findViewById(R.id.image_album_splash);
Animation myFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fadein);
heyDj.startAnimation(myFadeInAnimation);
spinninRecords.startAnimation(myFadeInAnimation);
Animation mySpinAnimation = AnimationUtils.loadAnimation(this, R.anim.spin_logo);
spinninRecords.startAnimation(mySpinAnimation);
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
Intent homeIntent = new Intent(getApplicationContext(), LandingActivity.class);
startActivity(homeIntent);
finish();
}
}, SPLASH_TIME_OUT);
}
@Override
protected void onDestroy()
{
super.onDestroy();
}
}
创建一个可运行的处理程序的正确方法是什么,所以它不会泄漏?
解决方案
在所有条件相同的情况下,如果您可以选择不使用 a Handler
,请不要使用 a Handler
。
在这种情况下,因为postDelayed()
is available on View
,您可以切换到它并避免任何与 -Handler
相关的恶作剧。
推荐阅读
- laravel - Laravel FTP - Windows 服务器的根路径
- c - 关于 char *s_gets(char *st, int n) 的问题
- ios - 使用 App Store Connect API 更新配置文件。如何?
- .net-core - OxyPlot.Wpf 是否与 .NET Core 兼容?
- javascript - 动态渲染组件的背景图像未出现在第一次渲染时
- python - 如何在 Python 中使用 Pandas 上传文件
- node.js - 在猫鼬中使用嵌入式文档更新文档不起作用
- string - 如何编写一个函数来获取字符串的第一个和最后一个字符?
- python - 可以使用 Python 优化此函数以在 O(n) 时间内运行吗?
- javascript - 如何使用 Angular 材料线性步进器和反应式表单处理表单提交