启动画面:使用处理程序

Oky*_*man 1 android splash-screen handler

我做对了吗?我有一个启动屏幕(只是一个图像),onCreate()我在运行繁重的功能后启动主要活动:

SPLASH_DISPLAY_LENGHT=2500;
new Handler().postDelayed(new Runnable(){
public void run() {
     LONG_OPERATING_FUNCTION(); 

     Intent mainIntent = new Intent(this, MainActivity.class); 
     Splash.this.startActivity(mainIntent); 
     Splash.this.finish();
} 
}, SPLASH_DISPLAY_LENGHT);   

    
Run Code Online (Sandbox Code Playgroud)

我认为我有内存泄漏,我正在尝试找到它。我认为 Splash 还没有真正结束。

Com*_*are 5

LONG_OPERATING_FUNCTION()不应该在主应用程序线程上完成,就像您在这里所做的那样。

理想情况下,您不使用启动屏幕,而是仅MainActivity在执行某项操作时LONG_OPERATING_FUNCTION()启用选定的功能AsyncTask

如果有人用枪指着你的头并强迫你实现闪屏,以免你的大脑被溅到,我会这样做:

  • 消除你的HandlerpostDelayed()打电话
  • 将其替换为AsyncTask
  • doInBackground()AsyncTask,做你的LONG_OPERATING_FUNCTION()
  • 如果LONG_OPERATING_FUNCTION()完成后,SPLASH_DISPLAY_LENGHT[原文如此]时间尚未过去,则用于SystemClock.sleep()在剩余时间内睡眠(或不睡眠)
  • 在 中onPostExecute(),启动MainActivity并调用finish()