关于提前异步加载SharePreference的一次失败尝试

来源:1-1 课前必读(不看会错过一个亿)

全是甘货

2019-03-05

实现思路是这样的:
1.由于没有MulitDex.install(),我直接在Application的onCreate里面第二句就开始初始化了。

@Override
public void onCreate() {
	super.onCreate();
	new Thread(() -> Pref1 = App.this.getSharedPreferences(“StringA”, Context.MODE_PRIVATE));
	new Thread(() -> Pref2 = App.this.getSharedPreferences(“StringB”, Context.MODE_MULTI_PROCESS));
}

并且提供了两个get方法(getPref2就不贴了)

public SharedPreferences getPref1() {
	return Pref1;
}

然后在本来初始化SharedPreferences的地方,作出了以下改动

ClassA{
	// 我把这句注释了
	SharedPreferences pref1 = context.getSharedPreferences(“StringA”, Context.MODE_PRIVATE);


	// 更换成了
	SharedPreferences pref1 = ((App)getApplication).getPref1();

	//getPref2() 也是同样道理,就不贴了。

}

但我的启动时间不减反增,
时间变化基本是:
ThisTime: +20
TotalTime: +20
WaitTime: +10

我怀疑是不是这个ClassA本来就不是在冷启动时候初始化的,所以我这样的改变,反而让冷启动增加了初始化的任务。

请老师指导一下,感谢!

写回答

1回答

随风绽放

2019-03-05

同学你好,出现这个情况是有可能的,需要根据具体的case具体分析。比如你这个ClassA是什么时候用的,如果说启动阶段没有使用Sp的话那你加进去肯定是有浪费的。还有:可以把Sp的初始化再提前些,到attachBaseContext里。

1
3
随风绽放
回复
全是甘货
你这个ClassA是在哪里使用到Sp的?你这样顺便再打个日志看下Sp执行完成的时间和真正调用的时间,哪个在前哪个在后。
2019-03-05
共3条回复

Top团队大牛带你玩转Android性能分析与优化

由表及里学到国内Top团队对性能问题的体系化解决方案

1696 学习 · 532 问题

查看课程