程序亦非猿

菩提本无树,程序亦非猿。


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 友链

  • 搜索

专业English,让自己更专业

发表于 2015-09-15 | 更新于: 2019-02-12 | 分类于 Android | 阅读次数:
字数统计: 264 | 阅读时长 ≈ 1 分钟

前言

记录一些专业英语,让自己更专业.

常用语

记录常用于Github,SOF,Email的语句,如:礼貌用语.

句子 解释 如何应用
In most cases 大多数情况下
Please, explain it a bit more. 请再多解释一些

短语

短语 解释 例句/备注
In most cases 大多数情况下
阅读全文 »

Pidcat让你的Logcat更美更高效

发表于 2015-09-15 | 更新于: 2019-02-12 | 分类于 Tools | 阅读次数:
字数统计: 49 | 阅读时长 ≈ 1 分钟

Pidcat

JakeWharton大神的logcat辅助工具,只显示你要看的进程,更加美观,体验更好.

用法很简单:

1
pidcat packagename

比如我要看网易云音乐的日志:

1
pidcat com.netease.cloudmusic

效果图

监听应用安装&卸载&升级

发表于 2015-09-14 | 更新于: 2019-02-12 | 分类于 Android | 阅读次数:
字数统计: 268 | 阅读时长 ≈ 1 分钟

前言

因为公司有多个App,所以有下载其他app,并监听其安装卸载的功能需求.

主要是利用系统广播来实现,简单记录一下.

定义IntentFilter

代码定义

注意要加一个为”package”的scheme!

1
2
3
4
5
6
7
IntentFilter 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;

Xml配置

1
2
3
4
5
6
7
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<data android:scheme="package"/>
</intent-filter>
阅读全文 »

(译)将Listener转换成Observable

发表于 2015-09-14 | 更新于: 2019-02-12 | 分类于 Java | 阅读次数:
字数统计: 296 | 阅读时长 ≈ 1 分钟

在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
18
public 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关键字.

阅读全文 »

RxJava操作符学习笔记

发表于 2015-09-12 | 更新于: 2019-02-12 | 分类于 Java | 阅读次数:
字数统计: 1.3k | 阅读时长 ≈ 5 分钟

操作符

操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
RxJava提供了很多很有用的操作符。

Subscribers更应该做的事情是“响应”,响应Observable发出的事件,而不是去修改。

所以修改就交给操作符吧.

Map

transform the items emitted by an Observable by applying a function to each item

用来把一个事件转换为另一个事件。
map()操作符就是用于变换Observable对象的,map操作符返回一个Observable对象,这样就可以实现链式调用,在一个Observable对象上多次使用map操作符,最终将最简洁的数据传递给Subscriber对象。

原理

实效
特性:

  1. 它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
  2. 可以对一个Observable多次使用map

用一个例子来练习:

阅读全文 »

RxJava初探

发表于 2015-09-11 | 更新于: 2019-02-12 | 分类于 Java | 阅读次数:
字数统计: 1.1k | 阅读时长 ≈ 4 分钟

RxJava

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最核心的两个东西:

  1. Observables(被观察者,事件源)
  2. Subscribers(观察者,用来响应Observables发出的事件)。

Observables发出一系列事件,Subscribers处理这些事件。
这里的事件可以是任何你感兴趣的东西 (触摸事件,web接口调用返回的数据。。。)

一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。

粗看跟观察者模式很相似,但是有一点明显不同,那就是:
如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。

Talk is cheap ,show me the code.
接下去练习一下~

阅读全文 »

听说每个人都会写单例,你会了吗?

发表于 2015-09-10 | 更新于: 2021-02-08 | 分类于 Architecture , 设计模式 | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 5 分钟

单例模式(Singleton Pattern)

当我们有这样的需求:某一些类应该只存在一个实例 的时候,我们就可以用单例模式来应对.

单例模式:确保一个类只有一个实例,并提供一个全局访问点.

单例模式是所有设计模式中最简单的一个,也是大部分人最早知道的一个设计模式.

但是即使是最简单的,也有很多可以推敲的细节,要做得对也不简单.

经典的单例

相信大家一定写过这样类似的单例模式代码:

1
2
3
4
5
6
7
8
9
10
11
public class Singleton {

private static Singleton ins;
private Singleton() {}
public static Singleton getIns() {
if (null == ins) {
ins = new Singleton();
}
return ins;
}
}

简单总结一下这样的写法:

  1. 提供一个全局静态的getIns方法,使得易于使用.
  2. 延迟Singleton的实例化,节省资源(所谓的懒汉式).
  3. 缺点是线程不安全.当多个线程同时进入if (null == ins) {}的时候就会创建多个实例.

OK,接下来我们看来是要解决多线程不安全的问题了.

阅读全文 »

神器JitPack

发表于 2015-09-10 | 更新于: 2019-02-12 | 分类于 Android | 阅读次数:
字数统计: 86 | 阅读时长 ≈ 1 分钟

神器JitPack

上一次我写了一篇文章关于自己上传library到JCenter的经历,传送门:将Library上传到Jcenter
需要一大堆配置,接下来介绍一个神器:JitPack.

Easy to use package repository for GitHub

正如官网所写,它是基于github的,而且非常easy,easy地有点吓人!

不说了,谁用谁知道.

将Library上传到Jcenter

发表于 2015-09-06 | 更新于: 2019-02-12 | 分类于 Android | 阅读次数:
字数统计: 987 | 阅读时长 ≈ 4 分钟

前言

习惯了compile 'com.android.support:appcompat-v7:22.2.0'这样一句话帅气的引用某个库.

这次自己尝试一下如何上传到’JCenter’~

工具: AndroidStudio,Gradle

申请Bintray账号

Bintray可以用Github账号登陆,很方便.

注册完,拿到昵称和ApiKey

获取方式,点击Edit:
点击Edit

然后点击API Key:
APIKey

做过第三方授权登录的同学应该都知道apikey吧,上传到JCenter我们同样需要.

配置

在上传之前,我们需要做一些配置.

阅读全文 »

设计模式开篇之设计原则

发表于 2015-09-06 | 更新于: 2021-02-08 | 分类于 Architecture , 设计模式 | 阅读次数:
字数统计: 1.8k | 阅读时长 ≈ 6 分钟

前言

PS:本人边学边记录,所以可能有欠缺有错误有不足之处,还望指导!

在学习设计模式之前我们有必要先了解一下一些设计原则.
其实设计原则也是从设计模式里来的,所以暂时不需要太理解,毕竟光看原则可能有时候理解不了.

SOLID设计原则)

讲设计原则,则不得不先提一下SOLID设计原则.
它的每个字母分别代表一个原则,接下来分别介绍一下.

单一职责原则(SRP)

单一职责原则(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的优点很明显:高内聚,低耦合,类结构逻辑清晰明了,提高了可读性,同时也易于维护

阅读全文 »
1…12131415
程序亦非猿

程序亦非猿

144 日志
11 分类
101 标签
GitHub
0%
© 2015 — 2021 程序亦非猿 | Site words total count: 122.7k
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
人次 次