首页 > 解决方案 > 处理程序和可运行泄漏

问题描述

在我的主要启动活动中,我有一个调用 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();
    }
}

创建一个可运行的处理程序的正确方法是什么,所以它不会泄漏?

标签: android

解决方案


在所有条件相同的情况下,如果您可以选择不使用 a Handler,请不要使用 a Handler

在这种情况下,因为postDelayed()is available on View,您可以切换到它并避免任何与 -Handler相关的恶作剧。


推荐阅读