Skip to content

Commit 29daa5d

Browse files
committed
SharedPreference
1 parent cd6f241 commit 29daa5d

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#有什么便捷的方式实现activity变暗的效果
2+
3+
- 不要新开启Activity的方式
4+
- 也不要使用Dialog
5+
- 让背景跟Dialog出现一样,变暗,带动画。
6+
7+
```
8+
private void dimBackground(final float from, final float to) {
9+
final Window window = getWindow();
10+
ValueAnimator valueAnimator = ValueAnimator.ofFloat(from, to);
11+
valueAnimator.setDuration(500);
12+
valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
13+
@Override
14+
public void onAnimationUpdate(ValueAnimator animation) {
15+
WindowManager.LayoutParams params = window.getAttributes();
16+
params.alpha = (Float) animation.getAnimatedValue();
17+
window.setAttributes(params);
18+
}
19+
});
20+
21+
valueAnimator.start();
22+
}
23+
```
24+
25+
亲测可用
26+
27+
```
28+
/** 窗口背景变暗*/
29+
dimBackground(1.0f,0.5f);
30+
31+
/** 窗口背景变亮*/
32+
dimBackground(0.5f,1.0f);
33+
```
34+
35+
#更多参考资料
36+
37+
- [张明云的回答](https://github.com/android-cn/android-discuss/issues/147)
38+
39+
#关于我
40+
41+
江湖人称『凯子哥』,其实就是一个闷骚的90后技术宅,Android开发者,喜欢技术分享,热爱开源。
42+
43+
- 我的CSDN博客:[http://blog.csdn.net/zhaokaiqiang1992](http://blog.csdn.net/zhaokaiqiang1992)
44+
- 我的微博:[裸奔的凯子哥](http://weibo.com/zhaokaiqiang1992),每天会不定时分享高质量博客,欢迎关注
45+
- 微信公众账号:kaizige1992
46+
47+
![](http://i12.tietuku.com/f55c34ddb1ba3830.jpg)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#SharedPreference的commit()和apply()的区别是什么?是否适合在多进程中使用?
2+
3+
##返回值
4+
5+
apply()没有返回值,而commit()返回boolean表明修改是否提交成功。
6+
7+
##操作效率
8+
9+
apply()是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘,。
10+
11+
而commit()是同步的提交到硬件磁盘。
12+
13+
因此,在多并发commit()的时候,会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。
14+
15+
而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,从一定程度上提高了效率。
16+
17+
##建议
18+
19+
如果对提交的结果不关心的话,建议使用apply(),如果需要确保提交成功且有后续操作的话,还是需要用commit()。
20+
21+
##多进程表现
22+
23+
一句话:在多进程中,如果要交换数据,不要使用SharedPreference,因为在不同版本表现不稳定,推荐使用ContentProvider替代。
24+
25+
在有的文章中,有提到在多进程中使用SharedPreference添加下面标志位就可以了。
26+
27+
```
28+
MODE_MULTI_PROCESS
29+
```
30+
31+
但是在官方文档中这样提到:
32+
33+
```
34+
This was the legacy (but undocumented) behavior in and
35+
before Gingerbread (Android 2.3) and this flag is implied when targetting such releases. For applications targetting SDK versions greater than Android 2.3, this flag must be explicitly set if desired.
36+
37+
@deprecated MODE_MULTI_PROCESS does not work reliably in some versions of Android, and furthermore does not provide any mechanism for reconciling concurrent modifications across processes. Applications should not attempt to use it. Instead, they should use an explicit cross-process data management approach such as ContentProvider
38+
```
39+
简单解释下,就是这个标志位在2.3之前是默认支持的,但是在2.3之后,如果需要多进程访问的情景,就需要显示的声明出来。
40+
41+
现在这个标志位被废弃了,因为在某些版本上表现不稳定。我们开发者不应该尝试去使用它,因为他没有提供任何并发机制,我们应该使用一种明确支持跨进程访问的机制,比如ContentProvider。
42+
43+
#更多参考资料
44+
45+
- [SharedPreference.Editor的apply和commit方法区别](http://m.blog.csdn.net/blog/S04103037/40372659)
46+
- Android源码
47+
48+
#关于我
49+
50+
江湖人称『凯子哥』,其实就是一个闷骚的90后技术宅,Android开发者,喜欢技术分享,热爱开源。
51+
52+
- 我的CSDN博客:[http://blog.csdn.net/zhaokaiqiang1992](http://blog.csdn.net/zhaokaiqiang1992)
53+
- 我的微博:[裸奔的凯子哥](http://weibo.com/zhaokaiqiang1992),每天会不定时分享高质量博客,欢迎关注
54+
- 微信公众账号:kaizige1992
55+
56+
![](http://i12.tietuku.com/f55c34ddb1ba3830.jpg)

0 commit comments

Comments
 (0)