0%

Activity的启动流程

向AMS发送startActivity请求
如果应用没启动,通过Socket向zygote发送启动进程请求
zygote收到以后,会去启动应用进程
应用进程启动之后就会向AMS发起attachApplication的IPC调用,目的是注册ApplicationThread
接下来AMS会向应用发起bindApplication的IPC调用,目的是初始化应用Application
完了之后,AMS又向应用发起了scheduleLaunchActivity的IPC调用,目的是给应用执行和加载Activity,并且执行Activity的生命周期

Read more »

FFmpeg参数描述

基本选项:
-formats 输出所有可用格式
-f fmt 指定格式(音频或视频格式)
-i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头
-y 覆盖已有文件
-t duration 记录时长为t
-fs limit_size 设置文件大小上限
-ss time_off 从指定的时间(s)开始, [-]hh:mm:ss[.xxx]的格式也支持
-itsoffset time_off 设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
-title string 标题
-timestamp time 时间戳
-author string 作者
-copyright string 版权信息
-comment string 评论
-album string album名
-v verbose 与log相关的
-target type 设置目标文件类型(“vcd”, “svcd”, “dvd”, “dv”, “dv50”, “pal-vcd”, “ntsc-svcd”, …)
-dframes number 设置要记录的帧数
视频选项:
-b 指定比特率(bits/s),似乎ffmpeg是自动VBR的,指定了就大概是平均比特率
-bitexact 使用标准比特率
-vb 指定视频比特率(bits/s)
-vframes number 设置转换多少桢(frame)的视频
-r rate 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
-s size 指定分辨率 (320x240)
-aspect aspect 设置视频长宽比(4:3, 16:9 or 1.3333, 1.7777)
-croptop size 设置顶部切除尺寸(in pixels)
-cropbottom size 设置底部切除尺寸(in pixels)
-cropleft size 设置左切除尺寸 (in pixels)
-cropright size 设置右切除尺寸 (in pixels)
-padtop size 设置顶部补齐尺寸(in pixels)
-padbottom size 底补齐(in pixels)
-padleft size 左补齐(in pixels)
-padright size 右补齐(in pixels)
-padcolor color 补齐带颜色(000000-FFFFFF)
-vn 取消视频
-vcodec codec 强制使用codec编解码方式(‘copy’ to copy stream)
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
-newvideo 在现在的视频流后面加入新的视频流

Read more »

GIT代理设置,加速clone

首先你得有ss客户端和账号: 客户端下载接:https://shadowsocks.org/en/download/clients.html 账号可以在网上找免费的。

确保你的ss客户端正常连接
打开命令行输入以下代码:
git config –global http.proxy ‘socks5://127.0.0.1:1080’
git config –global https.proxy ‘socks5://127.0.0.1:1080’

Read more »

Android富文本功能记录

从assets中加载本地WebView模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void getAssetsHtml(Context context, WebView webView,String contentText){

try {
AssetManager assetManager = context.getAssets();
//InputStream stream = assetManager.open("page.html");
InputStream stream = assetManager.open("newsyun.html");
BufferedReader r = new BufferedReader(new InputStreamReader(stream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append("\n");
}
//String str_div_container = "<div class=\"newsyun_container\"></div>";
String str_div_container = "<body>BODY_CONTAINER</body>";
if (total.toString().contains(str_div_container)){
String[] split = total.toString().split(str_div_container, -1);
String newString = split[0] + contentText + split[1];
webView.loadDataWithBaseURL(null, newString, "text/html", "UTF-8", null);
}
//webView.loadDataWithBaseURL(null, total.toString(), "text/html", "UTF-8", null);
} catch (Exception xxx) {
Log.e(TAG, "Load assets/page.html", xxx);
}
}
Read more »

CustomLengthFilter 搜索结果中对于长度的过滤,半角全角问题

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package com.tangyin.mobile.newsyun.utils;

import android.text.InputFilter.LengthFilter;
import android.text.Spanned;

public class CustomLengthFilter extends LengthFilter {
private int max;// 字符串能输入的最大长度
private onFullListener listener;

/**
* @param max
* 字符串能输入的最大长度,半角字符算1,全角字符算2
*/
public CustomLengthFilter(final int max) {
super(max);
this.max = max;
}

@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
int mlength = getLength(dest.subSequence(dstart, dend).toString());// 修改字符串的长度
int dlength = getLength(dest.toString());// 已有字符串的长度
int slength = getLength(source.subSequence(start, end).toString());// 要增加的字符串的长度
int keep = this.max - (dlength - mlength);// 还差多少字符到最大长度
if (keep <= 0) {
// 已经到达最大长度
if (null != listener) {
listener.isFull();
}
return "";
} else if (keep >= slength) {
// 还没到达最大长度
return null;
} else {
// 超出最大长度
int tmp = 0;
int index;
for (index = start; index <= end; index++) {
if (isFullwidthCharacter(source.charAt(index))) {
tmp += 2;
} else {
tmp += 1;
}
if (tmp > keep) {
break;
}
}
if (null != listener) {
listener.isFull();
}
return source.subSequence(start, index);
}
}

public void setOnFullListener(onFullListener listener) {
this.listener = listener;
}

public interface onFullListener {

/**
* 这个方法会在输入字符串超出极限时被调用
*/
void isFull();
}

/**
* 判断字符串是否为空或空串
*
* @param str
* 待判断的字符串
* @return true:字符串为空或空串
*/
public static boolean isNull(final String str) {
if (null == str || "".equals(str)) {
return true;
} else {
return false;
}
}

/**
* 获取字符串长度(半角算1、全角算2)
*
* @param str
* 字符串
* @return 字符串长度
*/
public static int getLength(final String str) {
if (isNull(str)) {
return 0;
}
int len = str.length();
for (int i = 0; i < str.length(); i++) {
if (isFullwidthCharacter(str.charAt(i))) {
len = len + 1;
}
}
return len;
}

/**
* 获取字符串的全角字符数
*
* @param str
* 待计算的字符串
* @return 字符串的全角字符数
*/
public static int getFwCharNum(final String str) {
if (isNull(str)) {
return 0;
}
int num = 0;
for (int i = 0; i < str.length(); i++) {
if (isFullwidthCharacter(str.charAt(i))) {
num++;
}
}
return num;
}

/**
* 判断字符是否为全角字符
*
* @param ch
* 待判断的字符
* @return true:全角; false:半角
*/
public static boolean isFullwidthCharacter(final char ch) {
if (ch >= 32 && ch <= 127) {
// 基本拉丁字母(即键盘上可见的,空格、数字、字母、符号)
return false;
} else if (ch >= 65377 && ch <= 65439) {
// 日文半角片假名和符号
return false;
} else {
return true;
}
}
}

Hexo Next主题自定义样式修改

  1. 修改字体 & 行高

找到文件:source\css_variables\base.styl

修改:$font-size-large = $font-size-base + 2px为:$font-size-large = $font-size-base。

Read more »

Markdown常用语法汇总

  1. H1,H2,H3,H4,H5,H6 #符号的用法
1
2
3
4
5
6
# 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题
  1. 字体的操作

a. 加粗:要加粗的文字左右分别用两个星号包起来
b. 斜体:要倾斜的文字左右分别用一个星号包起来
c. 斜体加粗:要倾斜和加粗的文字左右分别用三个*星号包起来
d. 删除线:要加删除线的文字左右分别用两个~~波浪号包起来

Read more »

Binder与传统IPC对比
NAME/VALUE Binder 共享内存 Socket
性能 需要拷贝一次 无需拷贝 需要拷贝两次
特点 基于C/S架构,易用性高 控制复杂,易用性差 基于C/S架构,作为一款通用接口,其传输效率低,开销大
安全性 为每个APP分配UID,同时支持实名与匿名 依赖上层协议,访问接入点是开放的,不安全 依赖上层协议,访问接入点是开放的,不安全
Read more »