android videoview使用总结

1.seekTo()的使用

有一个重新进入跳转到上次播放视频地方的需求,其实就是记住播放位置,重新进入时直接在对应位置播放。
seekTo()方法播放网络视频是有一定延时的,所以要在视频缓冲好后才进行播放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
videoView.seekTo(position);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
videoView.start();
}
});
}
});

2.按键处理

可以参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
case KeyEvent.KEYCODE_DPAD_CENTER:
if(player.isPlaying()){
player.pause();
}else {
player.start();
}
return true;
case KeyEvent.KEYCODE_DPAD_DOWN_LEFT:
return true;
case KeyEvent.KEYCODE_DPAD_DOWN_RIGHT:
return true;
case KeyEvent.KEYCODE_DPAD_UP:
player.showControls();
return true;
case KeyEvent.KEYCODE_DPAD_DOWN:
player.hideControls();
return true;
}
}
return super.onKeyDown(keyCode, event);
}

Retrofit使用小结

Retrofit使用小结

一.简介与安装

在gradle的依赖里加入以下语句:

1
2
3
4
5
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava'
compile 'com.squareup.retrofit2:converter-gson'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
testCompile 'com.squareup.okhttp3:mockwebserver:3.5.0'

不要忘记加上网络权限:

1
<uses-permission android:name="android.permission.INTERNET" />

请注意使用ProGuard的话,要加入下面的语句:

1
-dontwarn okhttp3.**

如果要混淆应用的话,请务必加上下面的语句,避免Rxjava被混淆:

1
compile 'com.artemzin.rxjava:proguard-rules:1.2.4.0'

二.Retrofit的基本用法

1
2
3
4
5
6
Retrofit retrofit = new Retrofit.Builder().baseUrl(App.BASEURL)
.addConverterFactory(new ToStringConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();

这个是我在项目里的写法,Retrofit使用Builder模式,需要传递一个地址BASEURL,还需要对应的数据转换器,代码里面依次是String、gson还有RxjavaCalld的转换;它会优先将数据转换成String类型的数据,
如果是RxjavaCall,则会转化成Rxjava的Observable<>对象。
之后是要添加底层的网络请求库,如果不配置,则会使用默认的

1
2
3
4
5
6
7
8
9
10
11
12
13
Interceptor interceptor = new Interceptor() {
@Override
public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
Request newRequest = chain.request().newBuilder()
.addHeader("t", timecurrentTimeMillis)
.addHeader("userId", SharedUtil.getString(context, "id"))
.build();
return chain.proceed(newRequest);
}
};
OkHttpClient client = new OkHttpClient();
client.interceptors().add(interceptor);

先定义一个过滤器(Interceptor),在头部增加了事件和用户的ID信息,然后为OkhttpClient装配上这个过滤器,来实现请求的一些个性化的需求;我们这里接着使用OkhttpClient作为网络处理的client。

这样,我们便得到了一个retrofit对象。接下来,只要定义好请求的接口和返回数据的实体类,我们就可以为所欲为了。

三.Retrofit的一些设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public interface UserApi {
@GET("/users/{user}/repos")
Call<List<User>> reposForUser(@Path("user") String user);
//同步
@POST("sync")
Call<ResponseBody> syncOrder(@Body String data, @Query("sign") String sign);
//登录
@FormUrlEncoded
@POST("login")
Call<LoginResult> loginIn(@Field("name") String name, @Field("pass") String pass);
//查询
@POST("query")
Observable<Response<ResponseBody>> rxquery(@Body String data, @Query("sign") String sign);
}

上面的代码里,第一个是通过Get方式请求数据,其中@Path注解对应的user字符串会自动替换{user}的值

第二个是使用POST方法提交data和sign字符串。

第三个是模拟表单提交,所以提交的值前面都是@Field。
这三个查询都放返回的是Call对象,获取到Call对象就可以使用Call对象进行请求并对返回的数据进行操作。

Retrofit是支持Rxjava的,我们让第四个方法返回一个Observable对象,来对返回的数据进行操作;

接下来使用返回的Call对象进行请求,我们使用了call.enqueue(Callback)进行异步请求,如果想同步请求的话,可以使用execute()方法(当然不推荐这个啦)。

1
2
3
4
5
6
7
8
9
10
11
12
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
Logger.e(TAG, response.body());
}
@Override
public void onFailure(Throwable t) {
Logger.e(TAG, t.getMessage());
}
});

可以看到回调有两种情况:onResponse 和onFailure,onResponse会通过转换器自动将服务器返回的数据转换成response对象,通过ResponseBody responseBody=response.body()可以得到我们所需要的对象。这里我们因为需要的是加密后的字符串,所以需要使用Sting weneed=new String((response.body()).bytes());来获取到需要的字符串.

附录

  • ToStringConverterFactory类的地址:

2017年的小行动

接下来要开始更新博客了,算是对自己的去年和今年的总结,同时把自己学习过程中的一些麻烦与解决方法记录下里,避免再次陷坑。自己也粗心,希望能通过记录的方式让自己不是那么健忘吧。

生活

继续断舍离

吉他继续练习,不落下

每周还是去跑4次步,雾霾天除外

一周一篇博客,记录下自己的生活

android相关

Retrofit

RxJava

自定义View

前端

React Native学习的过程

Vuejs完成自己的博客搭建

Node和npm入门搭建随记

/Users/mywjch/Pictures/108x108.png

NPM

##升级所有包:
npm update -g

##全局安装包
npm install -g 包名

android-IntentService学习

1.打开Android Studio(AS),新建一个IntentService,AS会自动帮你创建如下的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* 开启一个子线程来运行服务,来处理异步的任务请求
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
*/
public class TestIntentService extends IntentService {
// TODO: Rename actions, choose action names that describe tasks that this
// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
private static final String ACTION_DOWNLOAD = "com.mywjch.learnrxjava.action.FOO";
private static final String ACTION_BAZ = "com.mywjch.learnrxjava.action.BAZ";
// TODO: Rename parameters
private static final String EXTRA_PARAM1 = "com.mywjch.learnrxjava.extra.PARAM1";
private static final String EXTRA_PARAM2 = "com.mywjch.learnrxjava.extra.PARAM2";
/**
* 这是一个帮助方法,你调用这个方法时,会使用ACTION_DOWNLOAD这个Action来启动服务来执行它,
* 如果服务已经在运行,并且在执行其他任务了,那么就会把这个Action放进队列,接下来执行.
* Starts this service to perform action Foo with the given parameters. If
* the service is already performing a task this action will be queued.
*/
// TODO: Customize helper method
public static void startActionDownload(Context context, String param1, String param2) {
Intent intent = new Intent(context, TestIntentService.class);
intent.setAction(ACTION_DOWNLOAD);
//把传进来的参数放进Intent,进行处理
intent.putExtra(EXTRA_PARAM1, param1);
intent.putExtra(EXTRA_PARAM2, param2);
//启动服务
context.startService(intent);
}
/**
* 与上面类似
* Starts this service to perform action Baz with the given parameters. If
* the service is already performing a task this action will be queued.
*/
// TODO: Customize helper method
public static void startActionBaz(Context context, String param1, String param2) {
Intent intent = new Intent(context, TestIntentService.class);
intent.setAction(ACTION_BAZ);
intent.putExtra(EXTRA_PARAM1, param1);
intent.putExtra(EXTRA_PARAM2, param2);
context.startService(intent);
}
public TestIntentService() {
super("TestIntentService");
}
/**
* 在IntentService的实现会回调onHandleIntent方法
*/
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
//这里判断是哪一个Action
if (ACTION_DOWNLOAD.equals(action)) {
final String param1 = intent.getStringExtra(EXTRA_PARAM1);
final String param2 = intent.getStringExtra(EXTRA_PARAM2);
//然后直接随便调用个方法就可以了
suibiandiaoyonggefangfa(param1, param2);
} else if (ACTION_BAZ.equals(action)) {
final String param1 = intent.getStringExtra(EXTRA_PARAM1);
final String param2 = intent.getStringExtra(EXTRA_PARAM2);
handleActionBaz(param1, param2);
}
}
}
/**
*会在backgroung线程里处理这个方法
*/
private void suibiandiaoyonggefangfa(String param1, String param2) {
// TODO: 这里来实现这个方法就可以了
Thread.sleep(3000);
//然后发广播返回处理结果
Intent intent =new Intent(HandlerActivity.UPLOAD_RESULT);
intent.putExtra(ACTION_PATH, path);
sendBroadcast(intent);
}
/**
* Handle action Baz in the provided background thread with the provided
* parameters.
*/
private void handleActionBaz(String param1, String param2) {
// TODO: Handle action Baz
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
super.onDestroy();
//队列中的任务完成后IntentService底层会直接调用stopSelf(msg.arg1);来关闭自己
Log.e("TAG","OnDeatory");
}
}

这个类就讲解的很清楚了,别忘了注册Service.

Android Download Manager学习

一.Download Manager是做什么的:

Android2.3(API level9)引入了Download Manager,作为一个service来优化长时间下载操作的处理.

二.什么场景可以使用:

三.怎么使用:

1.获取:

DownloadManager downloadManager = Context.getSystemService(Context.DOWNLOAD_SERVICE);

2.下载一个文件:

1
2
3
4
5
Uri uri = Uri.parse("文件地址");
DownloadManager.Request request = new Request(uri);
long reference =downloadManager.enqueue(request);

根据返回的引用值,可以对下载进行进一步的操作或者查询,包括查看状态或者取消下载.
也可以进行设置:

可以调用addRequestHeader()和setMimeType()来给请求添加报文头或者重写服务器返回的MIIME类型.
可以个某个下载制定连接条件.setAllowedNetworkTypes()方法可以限制下载类型为WIFI或者移动网络如

request.setAllowedNetworkTypes(Request.NETWORK_WIFI)

调用enqueue后,一旦连接可用且DownloadManager空闲,就会开始下载.

下载完之后,如何通知:

需要注册一个Receiver来接收下载完成ACTION_DOWNLOAD_COMPLETE的通知,它将包含一个EXTRA_DOWNLOAD_ID extra,其中包含了已经完成下载的引用ID.

git学习

基本概念:

查看对象类型

git log –pretty=raw –graph e672332

打印提交对象之间的互相关联的跟踪链,–pragh显示parent属性,没有parent即为起点

显示当前分支

git branch

HEAD,master分支,和refs/heads/master区别

使用master代表分支master中最新的提交,也可以使用全称refs/heads/master或heads/master

使用HEAD代表版本库中最近的一次提交

符号^可以用来只带父提交,如:

HEAD^代表版本库的上一次提交,即最近一次提交的父提交(即倒数第二次提交)

HEAD^^代表HEAD^的父提交

Git重置

git reset可以将游标指向任意一个存在的提交ID

git reset –hard HEAD^将master重置到上一个老的提交中,此时提交历史也会改变

使用git reset重置命令很危险,会彻底的丢失历史

使用Git reflog来挽回错误的重置

git reflog show master |head -5

7250a94 master@{0}: HEAD^: updating HEAD

df208c4 master@{1}: commit: leavewelcome.txt alone

7250a94 master@{2}: merge 7250a:Fast-forward

a2d0352 master@{3}: commit: 5th commit

67fba85 master@{4}: master@{3}: updatingHEAD

重置master为2次提交之前的值:

git reset –hard master@{2}

git检出

git branch -v查看当前分支

git chackout master切换到master分支上

git checkout branch检出branch分支

git merge ac23224将处于分离头指针状态的提交于当前分支合并

基本操作:

删除文件:

git rm ww.txt在版本库的最新提交中删除文件,在历史提交中还在。而直接在工作区删除文件,对暂存区和版本库没有任何影响。

移动文件:

直接先使用linux的重命名:mv welcome.txt README

然后添加即可: git add -A

回复删除的文件:

最简洁实用的语句:git checkout HEAD~1 – welcome.txt

选择性添加文件:

git add -i使用交互式界面添加文件

文件忽略:

.gitignore的作用范围时其所出的目录及其子目录

Git的文件忽略只是对未入库(untrack)的文件起作用

Git的忽略语法:

1.忽略文件中的空行或以#开始的行会被忽略

2.可以使用通配符,*代表任意多字符,?代表单字符,[abc]代表可选字符范围

3.如果名称的最前面是一个路径分隔符(/),表明要忽略的文件在此目录下,而非子目录的文件

4.如果名称的最后面是一个路径操作符(/),表明要忽略的是一整个目录,同名文件不忽略,否则(即没有/的话)同名的文件和目录都忽略。

5.在名称的最前面添加一个感叹号(!),代表不忽略

如:

*.a #忽略所有以.a为扩展名的文件

!lib.a #但是lib.a文件或目录不要忽略,即使是前面设置了对*.a的忽略

doc/*.txt #忽略文件如doc/notes.txt ,但是文件如doc/serve/arch.txt不被忽略

/TODO #只忽略此目录下的TODO文件,子目录的TODO文件不被忽略

build/ #忽略build/目录下所有的文件

你的知识需要管理-读书笔记

第一节.你的知识问题

开头的话深深的觉得说的很对

“现在,所谓无知不是指没有知识,而是不会展示自己的知识、不会发挥知识的价值、
不会发现新知识、不会学习新知识,也不去创造知识。
对于主要靠知识谋生的知识工作者而言,你的知识管理过程是否运转自如,
是个人发展和个人竞争力能否持续提升的关键。”

然后开始一个标题一个标题的举起例子来:好单位靠不住,好老爸好老公靠不住(额,好老婆这么说也靠不住),’稳定’的职位也靠不住”,意思就是靠不住嘛,难道是要说只能靠自己?

果然,下面开始了:

(那)我们依靠什么

“如果想拥有快乐的一生,你一定要靠自己:父母会老去、单位会破产、朋友会离开、夫妻可以化作分飞燕。如果想做一个有成就的人,你更要靠自己。”不靠自己真的会这样的哦.

“靠自己的劳动挣自己的饭吃并不丢人,丢人的是那些高水平工作做不了,低水平工作又不愿意做的“啃老族”。”恩,确实,赞同.

另外补充了一个观点:

“个人的发展主要靠自己,但并非拒绝别人的帮助,更不是不帮助别人。”

用好几十页文字进行了我们为什么要依靠自己的扯淡之后,终于说了一个很关键的地方:

“接下来的问题就是:你应该靠自己什么?”

“现在每个人都必须要考虑自己如何快速学习知识、学习什么知识、如何保存掌握的知识、如何分享知识给你的合作伙伴、如何使用和创新知识。

简单地说,如果没有对整个知识过程的管理,那么你必然会丧失你的竞争力,无论你是高中毕业还是拥有博士学位。

你的知识需要管理

主题出来了.


“第二节 你的“无知”现状”

又是一句大实话:

“别以为你整天上互联网就有知识,你看的只不过是大量的信息而已!”

因为现在互联网充斥着大量的信息,有用或无用,所以要这么做:

“对于知识的爆炸,解决的方式是你要明确自己的知识需求。知识虽多但人生有限,
如果知识不能被你所用,不能成为“你的知识”,这些知识对你也没有作用。”

还有就是:

“别把数据、信息和知识相混淆”

三者的区别见笔记图1(书中表1)

后面也把知识分为2类:

“知识又可以分为显性知识和隐性知识。所谓显性知识是指能够用语言、文字、肢体等方式表达清楚的知识;而隐性知识则是虽然知道如何做,但却很难告诉别人或者写明白、说明白的知识。从掌握知识的角度讲,大量的知识以隐性的成分存在着,而能显性化的部分较少。”

“隐性知识显性化应该成为现代人的一项必备能力,如果你不能显性化你的知识,就无法建立你的竞争力。为什么中医中药很难做大,一个很重要的原因是它们主要依靠隐性知识作判断,所以传承、复制的难度较大,因此就很难快速发展。

隐性知识还有一些特点,了解这些特点对于你管理自己的知识很有价值。

  • 你的隐性知识可能只是对你自己是隐性的,对于其他人、其他的机构可能已经是显性知识,这就需要你在前人基础上进行学习,明白是否已经有类似的显性知识;
  • 隐性知识需要环境(此时、此地),并非永远是隐性的;
  • 谁能将隐性的知识最先显性化,谁就是知识创新的开拓者。譬如许多大师的创新,多年后也有不同的人表达,但前者是”“大师,因为他最早将隐性知识显性化;
  • 隐性知识显性化能力成为人与人之间能力差别的重要方面。将自己的隐性知识显性化应该成为每个知识工作者应具备的能力之一;
  • 隐性知识显性化需要需求、环境等外力的作用,外力的拉动加上个人显性化的意愿,可以促进隐性知识显性化的过程;
  • 社区是促进隐性知识显性化的环境;
  • 隐性知识显性化的方法:讨论、回答提问、需求的压力、工作分解、流程分析等;
  • 不能用通俗、简单的语言和文字表述知识,表明对该领域知识掌握得不够深入。”
有点多,但是感觉说的很多,所以没有抽取主干,直接贴过来.

因此,顺应时代而生的我们这一代叫 知识生产者

下面是解释:

“那些主要工作内容为处理信息和知识,并在工作中利用信息和知识的人,以区别于原来的产业工人。”–by 彼得 德鲁克 <<卓有成效的管理者>>

所以这么说来,我就是知识生产者,因为“你的竞争力的源泉和优势就是你处理信息和知识的能力与效率。”

即 “未来=知识管理能力”

但是我们面对信息可能还会有诸多问题:

  • “第一个问题是不知道如何评估信息,看到什么信息就相信什么信息,缺乏对信息评估的能力;
  • 第二个问题是他们不知道有目标地去获取信息,因为缺乏知识基础,他们很难产生对信息的明确需求。”

所以说:

“知识与信息不同,知识除了要靠经验去消化汇集来的信息,还要去验证、思考,甚至在亲身体验过程中,去发现问题、解决问题。

在当今时代下,个人的成长和发展以及个人竞争优势的建立,绝对不是靠信息的数量(虽然缺乏信息和获取信息的能力可以成为一个人发展的劣势)。不要以为你整天在互联网上就掌握了知识,互联网上的信息和知识你能获得我也能获得,互联网上有显性的知识也有信息,显性的知识必须跟你个人的原有知识结合起来,转化成你的隐性知识,加上对环境的判断才能发挥作用。”

接下来该总结第二节了:

“人只能依靠自己,而依靠自己最重要的一点是依靠自己对个人知识过程的管理。只有对整个知识过程的管理才是现代人发展竞争力和竞争优势的源泉。”

第三节 “你的五个知识问题”

  • “学习知识——你会学习吗”
  • “保存知识——用时能找到吗”
  • “知识共享——让人知道你知道”
  • “知识使用——能让知识带来价值吗”
  • “知识创新——能用创新超越竞争对手吗”

重点的一些蛮实用的观点

“笔者反对无目的、无限制地存储大量的知识和信息,而要从个人发展的角度来分析自己的知识需求,建立个人知识存储的分类、命名规则,充分利用最新的技术手段协助自己对知识的保存和利用,让存储的知识真正对个人的学习、利用和创新产生价值,并提高整个知识管理过程的效率。”

“只有通过不断的知识共享、知识传播,才能让别人认识到你的价值和独特性,你才会被同事重视,被领导垂青,进而得到更多的机会”.“如果你想将你的知识共享或者传播的时候,你就会发现虽然你觉得自己知道,但这种知道是支离破碎、不系统的,你需要再学习和实践,这无形中促进了你对知识的掌握。”

“从知识保存的角度讲,人超不过图书馆和硬盘,所以知识的保存不是目的。我们掌握知识的目的在于让知识能够发挥作用,让知识帮助我们生活得更美好:改善我们的生活,提升生产效率和产品(服务)质量,赚更多的钱,职位更高,形成个人的影响力,心情更愉悦等。”

最后,作者给出了自己专业的观点:

“笔者建议的原则是:

在你读书和工作的第一个十年,要更多地关注第一个问题(知识的学习)、第二个问题(知识的存储)、第三个问题(知识的共享和传播),因为在30岁以前,你可以更多地去探索自己的优势、特长来确定自己的学习目标和方向性,同时你要养成良好的知识保存习惯,乐于并善于分享,树立自己的专业形象;在这个阶段,因为相对来说对知识创新的要求不高,你尽可以做简单的知识使用方面的工作,在不同的企业进行体验。

在你工作的第二个十年,你需要更多地关注第三个问题(知识的共享和传播)、第四个问题(知识的利用)和第五个问题(知识的创新),通过知识的共享和传播建立自己在某个细分领域的专业形象,通过知识转化“转化为产品和服务直接提供给市场,通过知识创新引领一个领域的发展与进步。”

“当然,每个人的发展路径都不同,你需要自己去探索适合自己的路径。”

“第二章 学习知识”

开头痛快的骂了我一顿:

“不学习当然不行,但学习也不一定行。你必须知道要学习什么知识,获取什么知识;同时,学习任何领域的知识必须达到一定的深度,否则你的知识就是常识。而常识怎么可能给你带来个人的竞争优势呢?”

#你TM你的没有深度的知识就是TM的常识!!!!!!!!

我们继续

第一节 为什么要学习

很多例子,废话,大家都懂的,略过

“第二节 学习什么知识”

“学习并不是最难的事情,而在学习中第一个问题就是学习什么。”

说了两个误区:

  • “只是爱上了学习本身,而没有考虑学什么,学习是为什么,如果学习没有方向性,以有限的时间和精力去追逐无限的知识内容,即使累死也没有效果。”–该学习什么
  • “在任何知识领域都浅尝辄止,欠缺知识的深度。”–学习的深度

“知识工作者需要的基础知识是哪些?应该如何知道自己掌握了哪些知识呢?笔者提供一个简单的方法,你可以找一找每年国家公务员考试中基础知识部分的题目,自己做一下测试。它的内容覆盖了哲学、政治、经济、文化、法律、科学、数学、逻辑、阅读、表达等各个方面,通过做这种测试你可以发现自己最擅长和最差的领域,因此你可以有意识地去恶补一下自己最差的部分,因为这些知识是你跟人交流沟通、掌握信息、学习其他知识的基础,知识基础的不牢固会成为你个人成长和进步的一大障碍。”

“确定你的学习方向”

“笔者可以告诉你的原则是:
你的兴趣要远远大于你的能力和时间约束。所以你在确定自己的方向时,在你众多的兴趣中,你必须做减法:聚焦,首先你要在一个细分的领域达到专家的水平。这个聚焦越细越好。然后选择自己有兴趣又有优势的部分,经营自己的长处和优势。”

了解哦自我的方法和工具:
1.你的价值观是什么
2.你的个人目标是什么
3.你的性格是什么–MBTI职业性格测试

“你应该学到什么程度”

“建议:了解你的优势,确定你的目标后,起码在一个领域的学习时间要达到3年以上,才能成为这个知识领域上的专家。”

“你的知识结构

“除非把一件件事情放进构造好的模型里,否则很快就会忘记。详细的资料是靠表达它的简化方式来保存在记忆里的……获得的知识,
如果没有完满的结构把它关联在一起,那是一种多半会被遗忘的知识。一串不连贯的论据在记忆中仅有短促得可怜的寿命。”
——美国教育心理学家、哈佛大学“认知研究中心”创立者布鲁纳”

“知识更新的加速,要求人们要不断地学习新知识,调整原有的知识结构,建立起与时代发展相适应的知识结构。同时,还要使自己掌握的知识具有一定的超前性,根据时代发展需要,及时掌握和补充必备的知识,认准发展的趋势,站在发展的前列。

知识结构可分为3个主要层次:

  • 第一,基础层次,即我们上文提到的现代人的基础知识,它是知识工作者必备的基本文化素质和修养;
  • 第二,中间层次,即较为系统的本专业知识,它是知识结构的特色,体现出不同知识工作者的特点和特色;
  • 第三,最高层次,这一层次是知识工作者的优势所在,它包括你从事专业的最新成就、技术发展、方向和动态的知识。”

“金字塔形知识结构又称“宝塔形知识结构”。其特点是宽阔的塔基(广博的基础知识)、较大的塔身(专业基础知识)、尖锐的塔尖(专业知识)。”

“第三节 怎样学习”

“人生短短数十载,时间是一个最稀缺的资源,而且是一个无法购买和复制的资源。所以在知识的学习中,你必须要考虑知识获取的“成本”问题,
这个成本除了金钱之外,最重要的是时间成本。”

讯飞语音合成 设置数字的读法

rdn参数用于设置数字的读法,设置rdn=1,“66000”会读成六万六千;设置rdn=2,会读成六六零零零零;
设置:

SpeechSynthesizer mTts= SpeechSynthesizer.createSynthesizer(context, null); 
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); 
mTts.setParameter(SpeechConstant.SPEED, "50");
mTts.setParameter("rdn", "2");

##Android权威指南笔记

####1.主题属性

使用主题属性引用,可将预定义的应用主题样式添加给制定组件.

使用主题属性引用,相当于告知android运行资源管理器:”在应用主题里找到名为listSeparatorTextViewStyle的属性.该属性指向其他样式资源,请将该资源的值放在这里”.

####2.布局参数:

名称不以layout_开头的属性作用于组件,进行自我配置.

名称以layout_开头的属性作用于父组件.我们将这些属性统称为布局参数.