我目前面临以下问题:每当我的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有几个相关的标签,我需要从中创建一个文档向量.
我使用Flexjson将这样的类序列化为JSON:
public class Item {
private Long id;
private String name;
private String description;
...
// Getters and setters
...
}
Run Code Online (Sandbox Code Playgroud)
许多Item字段可以为null(例如,描述).因此,当使用Flexjson序列化这样的Item对象时,我得到以下JSON:
{"id":62,"name":"Item A","description":null,...}
Run Code Online (Sandbox Code Playgroud)
因为,正如我已经提到的,Item对象可能包含许多空值字段,因此输出的JSON比实际需要的长.到目前为止这是一个问题,因为我想通过WiFi,3G,EDGE或GPRS通过无线连接将生成的JSON从Web服务器发送到移动客户端(即,需要更多带宽,这会导致速度降低).
因此,我想问一下如何使用Flexjson(有效地)排除空值属性?
谢谢!