初始化Android应用程序

Mat*_*ias 6 java sdk android android-activity

我目前面临以下问题:每当我的Android应用程序启动时,它都需要执行一些耗时的初始化代码.如果没有此代码,应用程序中的所有活动/服务都将无法正常运行.

到目前为止,我已将此初始化代码放入SplashScreen活动中,我在清单中将其声明为MAIN活动.一旦执行了初始化代码,我就完成()启动画面并启动实际的主要活动,即由几个选项卡组成的活动,用户可以从中进行其他几项活动.

现在的问题如下:当我的应用程序放在后台时,经过一段时间后,在启动其他应用程序后,我的应用程序/进程被终止.当我从主屏幕重新启动它时,Android会恢复活动堆栈(任务)并在它们上调用onCreate().但是,不执行启动画面活动,因此不执行初始化代码,这会导致异常.

我现在可以将初始化代码放在应用程序的onCreate()中,但是这会导致黑屏,直到方法结束.

有没有人有想法,我可以在启动时正确初始化我的应用程序的位置和方式?

初始化代码:

public void init() {
    if (initialized) {
        return;
    }

    // Initialize terms
    List<Tag> tags= DynamicDao.loadAll(Tag.class);
    int numTags = tags.size();
    terms = new String[numTags];
    for (int i = 0; i < numTags; i++) {
        terms[i] = tags.get(i).getTag();
    }

    // Initialize document-term matrix
    List<Item> items = DynamicDao.loadAll(Item.class);
    createDocumentTermMatrix(items);

    initialized = true;
}
Run Code Online (Sandbox Code Playgroud)

注意:一个Item有几个相关的标签,我需要从中创建一个文档向量.

Ebo*_*ike 3

你的初始化有多昂贵?你在那儿做什么?一般来说,我建议不要使用启动屏幕(它是移动应用程序,而不是桌面应用程序)。相反,在显示主 UI 时使用工作线程来初始化数据,然后在工作线程完成后使用处理程序来初始化 UI。

或者,我会研究为什么你的初始化花费这么长时间,并优化它。你在那做什么?

  • 你添加定时器了吗?查看此代码块的每个部分需要多长时间。测量执行 loadAll 所需的时间、for 循环的时间以及 createDocumentTermMatrix 的时间。 (2认同)