当前位置: 首页 > 面试题库 >

加载时Android显示启动画面

梁丘成和
2023-03-14
问题内容

我有一个Android应用程序,其中显示了3秒钟的“启动画面”。之后,MainActivity被加载。

不幸的是,MainActivity需要额外的〜4秒来加载。首次启动时间更长。但是,在加载该应用程序后,一切都会顺利进行。

现在如何在启动屏幕显示期间实现MainActivity的加载?它只应显示一个图像,直到整个东西完全加载为止。我已经阅读了有关Async-
Task的信息,但不确定将其放置在何处以及如何正确使用它。有谁可以帮助我吗?

SplashScreen.java

public class SplashScreen extends Activity {
    private static int SPLASH_TIME_OUT = 3000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startup);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent i = new Intent(SplashScreen.this, MainActivity.class);
                startActivity(i);
                finish();
            }
        }, SPLASH_TIME_OUT);
    }
}

MainActivity.java

public class MainActivity extends Activity implements OnClickListener, MediaController.MediaPlayerControl {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Some heavy processing
        //starting services
        //starting Google Text to Speech
        //and so on...

    }

}

问题答案:

如果对于显示初始屏幕的时间没有特定限制,则可以通过AsyncTask以下方式使用:

public class SplashScreen extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startup);
        startHeavyProcessing();

    }

    private void startHeavyProcessing(){
       new LongOperation().execute("");
    }

    private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            //some heavy processing resulting in a Data String
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.interrupted();
                }
            }
            return "whatever result you have";
        }

        @Override
        protected void onPostExecute(String result) {
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            i.putExtra("data", result);
            startActivity(i);
            finish();
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }
}

如果结果数据不是字符串,则可以将Parcelable对象作为活动的额外内容。在onCreate你可以检索数据:

getIntent().getExtras.getString('data');



 类似资料:
  • 问题内容: 我尝试在我的网站中实施AJAX。单击div changepass的内容时,则应加载changepass.template.php。这是我为此使用的代码。 我的问题是在页面changepass.template.php完全加载时如何显示GIF动画(loading.gif)。请给我一些代码提示。 问题答案: 有很多方法可以做到这一点。一种简单的方法: JS: 詹姆斯·怀斯曼 ( James

  • 本文向大家介绍jQuery Ajax 加载数据时异步显示加载动画,包括了jQuery Ajax 加载数据时异步显示加载动画的使用技巧和注意事项,需要的朋友参考一下  ajax加载后台数据就不说的那么细了。 看下面代码首先前台上放置代码 在js脚本文件中首先把这个图片动画隐藏 代码如下 然后异步ajax提交请求代码如下 ..................... 注意: async: true, 当

  • 我知道这是Android Studio的一个老问题,但请相信我,我尝试了在Stack Overflow旧线程上发现的所有问题(2016年和2017年的解决方案,很明显在2021不再有效)。 我安装了Android Studio,当我启动它时,它不会运行。我尝试将JAVA\u HOME、JDK\u HOME、STUDIO\u JDK设置为Android STUDIO附带的JRE文件夹和C:\Prog

  • 主要内容:ion-spinner,实例ion-spinner ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG。 用法 像大部分其他的ionic组件一样,spinner也可以使用ionic的标准颜色命名规则,就像下面这样: 实例 HTML 代码 CSS 代码 JavaScript 代码 尝试一下 » 效果如下所示:

  • ion-spinner ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG。 用法 <ion-spinner icon="spiral"></ion-spinner> //默认用法 像大部分其他的ionic组件一样,spinner也可以使用ionic的标准颜色命名规则,就像下面这样: <ion-spinner

  • 显示加载动画 Tida.showLoading("加载中..."); 隐藏加载动画 Tida.hideLoading();