前言
记录一些专业英语,让自己更专业.
常用语
记录常用于Github,SOF,Email的语句,如:礼貌用语.
| 句子 | 解释 | 如何应用 |
|---|---|---|
| In most cases | 大多数情况下 | |
| Please, explain it a bit more. | 请再多解释一些 |
短语
| 短语 | 解释 | 例句/备注 |
|---|---|---|
| In most cases | 大多数情况下 |
JakeWharton大神的logcat辅助工具,只显示你要看的进程,更加美观,体验更好.
用法很简单:1
pidcat packagename
比如我要看网易云音乐的日志:1
pidcat com.netease.cloudmusic

因为公司有多个App,所以有下载其他app,并监听其安装卸载的功能需求.
主要是利用系统广播来实现,简单记录一下.
注意要加一个为”package”的scheme!1
2
3
4
5
6
7IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);//监听应用安装
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);//监听应用卸载
intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);//监听应用升级
intentFilter.addAction(Intent.ACTION_MY_PACKAGE_REPLACED);//自己的应用升级
intentFilter.addDataScheme("package"); // 必须要
return intentFilter;
1 | <intent-filter> |
在Java中使用listeners很常见.并且如果你使用RxJava,你会更乐意使用Observable替代listeners.
但是如果你不得不处理一个你不能修改源代码的库呢?
这里有一个简单的方法去创建一个围绕listener的Observable.
假设我们有个一接口ValueUpdateListener并且一个对象ValueUpdater将会调用我们的listener:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public interface ValueUpdateListener {
void onValueChanged(@NonNull String value);
}
public class ValueUpdater {
// in some point of the class...
public void registerListener(ValueUpdateListener listener) {
//...
};
public void unregisterListener(ValueUpdateListener listener) {
//...
};
}
我们可以创建一个Observable像这样:
译者注:这里有些地方缺少了final关键字.
操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
RxJava提供了很多很有用的操作符。
Subscribers更应该做的事情是“响应”,响应Observable发出的事件,而不是去修改。
所以修改就交给操作符吧.
transform the items emitted by an Observable by applying a function to each item
用来把一个事件转换为另一个事件。
map()操作符就是用于变换Observable对象的,map操作符返回一个Observable对象,这样就可以实现链式调用,在一个Observable对象上多次使用map操作符,最终将最简洁的数据传递给Subscriber对象。


特性:
用一个例子来练习:
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
RxJava 是java的响应式编程的扩展.
Ps:RxJava 配 Lambda 更合适哦!~
不过这里没用Lambda,本文只关心RxJava语法,因为现在是学好基础语法,打好基础的时候,如果你还不知道Lambda的可以看看我的使用Lambda在Android中的替代匿名类
依赖:compile 'io.reactivex:rxjava:1.0.12'
RxJava最核心的两个东西:
Observables发出一系列事件,Subscribers处理这些事件。
这里的事件可以是任何你感兴趣的东西 (触摸事件,web接口调用返回的数据。。。)
一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。
粗看跟观察者模式很相似,但是有一点明显不同,那就是:
如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。
Talk is cheap ,show me the code.
接下去练习一下~
当我们有这样的需求:某一些类应该只存在一个实例 的时候,我们就可以用单例模式来应对.
单例模式:确保一个类只有一个实例,并提供一个全局访问点.
单例模式是所有设计模式中最简单的一个,也是大部分人最早知道的一个设计模式.
但是即使是最简单的,也有很多可以推敲的细节,要做得对也不简单.
相信大家一定写过这样类似的单例模式代码:1
2
3
4
5
6
7
8
9
10
11public class Singleton {
private static Singleton ins;
private Singleton() {}
public static Singleton getIns() {
if (null == ins) {
ins = new Singleton();
}
return ins;
}
}
简单总结一下这样的写法:
getIns方法,使得易于使用.if (null == ins) {}的时候就会创建多个实例.OK,接下来我们看来是要解决多线程不安全的问题了.
上一次我写了一篇文章关于自己上传library到JCenter的经历,传送门:将Library上传到Jcenter
需要一大堆配置,接下来介绍一个神器:JitPack.
Easy to use package repository for GitHub
正如官网所写,它是基于github的,而且非常easy,easy地有点吓人!
不说了,谁用谁知道.
PS:本人边学边记录,所以可能有欠缺有错误有不足之处,还望指导!
在学习设计模式之前我们有必要先了解一下一些设计原则.
其实设计原则也是从设计模式里来的,所以暂时不需要太理解,毕竟光看原则可能有时候理解不了.
讲设计原则,则不得不先提一下SOLID设计原则.
它的每个字母分别代表一个原则,接下来分别介绍一下.
单一职责原则(Single Responsibility Principle,SRP)
a class should have only a single responsibility (i.e. only one potential change in the software’s specification should be able to affect the specification of the class)
简单来说就是:一个类应该只有一个职责(只有一个潜在的改变能影响这个类);
每一个引起类变化的原因就是一个职责,当类具有多职责时,应该把多余职责分离出去,分别创建类来完成,
否则这个类的耦合度会不断提升,不利于维护等.
比如某些所谓的多功能道具,集多少多少功能于一体,吹得很牛逼,结果呢?其中一个坏了,整个都坏了,全完蛋.
如果说我们的代码也这样,一个类又有Http请求又有IO操作的方法又封装了各种Util方法,背负各种职责,耦合度高得能吓死你,还怎么快乐地敲代码?
SRP的优点很明显:高内聚,低耦合,类结构逻辑清晰明了,提高了可读性,同时也易于维护