札记

返回桌面

1
2
3
Intent home=new Intent(Intent.ACTION_MAIN);
home.addCategory(Intent.CATEGORY_HOME);
startActivity(home);

解决64k方法问题

在app build.gradle下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
android {
....
defaultConfig {
....
multiDexEnabled true
}
....
}
dependencies {
....
compile 'com.android.support:multidex:1.0.0'
....
}

然后在Manifest中

1
2
3
4
5
6
<application
android:name="android.support.multidex.MultiDexApplication"
....
>
....
</application>

如果有自己的Application,那么就在 attachBaseContext() 中调用 MultiDex.install(this) 支持multidex。

创建数据库

http://www.cnblogs.com/mmy0925/archive/2013/01/22/2871593.html

关于文件模式

MODE_PRIVATE

/**
 * File creation mode: the default mode, where the created file can only
 * be accessed by the calling application (or all applications sharing the
 * same user ID).
 */

文件的默认模式,文件只能被创建它的应用获取。当文件流设置这种方式时,文件会被创建打开,如果文件有数据时,数据会被覆盖。如果是数据库时,数据库的数据并不会被覆盖

关于DuplicateFileException重复文件异常

引入相同的jar包编译时,会出现DuplicateFileException异常,如下:
com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
这是由于jar中有相同的LICENSE文件,在app build.gradle中通过packagingOptions设置排除该文件即可。

1
2
3
4
5
6
7
8
9
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
packagingOptions{
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
}
....
}

提示什么重复就exclude添加什么文件就行了

SQLite支持的数据类型

官网地址

  1. NULL 这种类型保存的全是null值

  2. INTEGER 基本就是所有的整数类型

  3. REAL 小数类型

  4. TEXT 文本类型,编码格式 (UTF-8, UTF-16BE 或者 UTF-16LE).

  5. BLOB 这种类型是你输入什么就保存什么。举个例子,你可以以这种类型保存音乐,视频,图片到数据库中

数据库查询有多少张表

SELECT name FROM sqlite_master WHERE type = ‘table’ AND name != ‘android_metadata’ AND name != ‘sqlite_sequence’;
这里排除了android_metadata表和sqlite_sequence表。
android_metadata 记录了创建的地区。

sqlite_sequence 记录了数据库包含的表名及其对应的数据量

查询表头字段格式

PRAGMA table_info(表名);如下数据库查询
可得

Cursor的一些方法

.moveToPrevious 移动游标到上一行
·isAfterLast() 游标是否指向最后一行
.getPosition() 获取当前游标的位置(位置是从0开始的)
.getCount() 获取总行数

关于nginx

下载地址,配置一个局域网内的文件服务器只需:
修改 “nginx\conf\nginx.conf”文件
cmd进入nginx根目录下

命令 含义
start nginx 启动
nginx.exe -s stop 直接停止
nginx.exe -s quit 保存配置后停止
nginx.exe -s reload 重载

Nginx Linux下的指令

命令 含义
nginx -t 检查Nginx的配置信息是否有错,配置是否成功
sudo systemctl reload nginx 重启nginx服务,systemctl用于管理系统、服务

System.setProperty()

System.setProperty(“key”, “value”);设置系统属性值,将值保存在内存里,需要时就通过System.getProperty(“key”);获取

CMD指令

CMD教程
/C 执行命令后结束
/K 执行命令后保留
/D 禁止从注册表执行Auto命令
cd. 进入当前目录(不懂这个有什么用)
cd.. 进入上层目录
cd\ 进入当前的根目录。cd命令执行跳转目录时,是change directory。不过也有另一种解释Current Directory,可用于显示当前的完整路径如:

netsh interface ip set dns “本地连接” static 180.76.76.76 修改dns,其中本地连接是连接名,180.76.76.76是dns参数,根据需要进行设置
批处理指令

start cmd /c “netsh interface ip set dns “本地连接” static 180.76.76.76”

netsh interface ip set address “网络连接” static IP地址 子网掩码 默认网关 跳数。 修改ip,网络连接根据情况修改,win7是本地连接,win8以上是以太网,ip地址填入需要的参数,子网掩码一般是255.255.255.255,默认网关填入需要的参数,跳数一般是1或者auto

指令 含义
calc 打开计算器
Chkdsk 磁盘修复
Cleanmgr 清理垃圾
compmgmt.msc 计算机管理
devmgmt.msc 设备管理器
diskmgmt.msc 磁盘管理
dvdplay 播放器

批处理

echo off 关闭命令显示
@echo off “echo off”也不显示

Linux常用指令

指令 含义
touch xxx 创建二进制文件
vi xxx 创建文件
rm xxx 删除文件
cat xxx 查看文件
mv xxx yyy 当yyy是文件时,将xxx重命名yyy 当yyy是文件夹目录时,将xxx移动到yyy中
ls -a 查看所有文件(包括.xx 隐藏文件)
clear 清屏
:wq 退出vi编辑模式
:set nu vi指令显示行号
:数字 vi指令跳转到指定行
sudo xxx 在当前用户环境下获取root权限执行xxx

使用终端,当文件是多个带空格的单车时,用斜杠空格转义

vi模式记录

以vi模式打开文件时,按insert键进入编辑模式。退出按Esc键,进入vim指令模式光标会退一格闪烁,输入冒号时光标会消失,接下来就可以输入指令了

Cent7 无法联网

进入/etc/sysconfig/network-scripts/ 目录下 找到一个配置文件 ifcfg-xxx(根据情况xxx会不同) 将noboot=no 改为 noboot=yes 这是系统启动时激活网卡的意思 最后service network restart 即可

Cent7 修改系统语言为中文

第一步 使用 locale -a |grep “zh_CN”命令 查看是否安装了中文语言包。显示
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

是安装了,否则使用yum install kde-l10n-Chinese 命令安装语言包(这条命令没使用过,我vps的精简系统和VMware中的系统都自带中文包 ┑( ̄Д  ̄)┍)

第二步 修改系统语言,修改之前可以使用locale命令查看当前系统语言环境,它会显示
LANG=en_US.UTF-8
LC_CTYPE=”en_US.UTF-8”
LC_NUMERIC=”en_US.UTF-8”
LC_TIME=”en_US.UTF-8”
LC_COLLATE=”en_US.UTF-8”
LC_MONETARY=”en_US.UTF-8”
LC_MESSAGES=”en_US.UTF-8”
LC_PAPER=”en_US.UTF-8”
LC_NAME=”en_US.UTF-8”
LC_ADDRESS=”en_US.UTF-8”
LC_TELEPHONE=”en_US.UTF-8”
LC_MEASUREMENT=”en_US.UTF-8”
LC_IDENTIFICATION=”en_US.UTF-8”
LC_ALL=

这样的东西,大体就是系统语言,数字排序时间显示等等都是按照美国英语UTF-8的习惯设置的。
那么要修改就使用vi /etc/locale.conf命令,将LANG=”en_US.UTF-8” 修改为LANG=”zh_CN.UTF-8”
最后重启就好了。顺便一提,配置文件是Cent7才修改的,之前是/etc/sysconfig/i18n

关于wampserver

在win7下 如果打开时提示缺少各种dll文件,那么请检查是否安装了vc9vc10vc11vc13vc14,其中vc14需要win7安装了sp1更新才可以正常安装。
安装完成后,如果localhost打不开,wampserver在右下角状态栏的图标不是绿色,鼠标移过去提示”有一个服务没有打开”,那么很有可能就是80端口被占用了,修改端口就行了。鼠标左击或者右击(左击右击会调出不同的菜单)图标,左击时在Apache文件夹下,点击”Use a port other than 80”修改端口。右击时在Tools下Port used by Apache:80一栏,点击”Use a port other than 80”修改端口。等待一会,wampserver就会变绿了,服务全部启动。浏览器打开时输入localhost:8080就可以打开了(这里我修改的端口是8080,所以指定了8080端口,你修改了什么端口指定它就行了)。

关于GWT

GWT地址:https://github.com/gwt-plugins/gwt-eclipse-plugin
GWT Designer地址:https://code.google.com/archive/p/gwt-designer/(需翻墙)建议直接下载离线包安装

ADB命令

查看当前栈顶的程序

adb shell dumpsys activity | findstr “mFocusedActivity”

结果:

mFocusedActivity: ActivityRecord{4aa57c74 u0 com.ss.yinyuehe/com.shunshun.clic
k.MainActivity t4}

说明当前的程序包名是com.ss.yinyuehe,Activity是com.shunshun.clic
k.MainActivity

或者

mFocusedActivity: ActivityRecord{4a9a5f40 u0 com.vphone.launcher/.Launcher t1}

程序包名com.vphone.launcher,Activity是com.vphone.launcher.Launcher

Java初始化顺序

Java初始化顺序
类变量(静态变量)、实例变量(非静态变量)、静态代码块、非静态代码块 的初始化时机
由 static 关键字修饰的(如:类变量[静态变量]、静态代码块)将在类被初始化创建实例对象之前被初始化,而且是按顺序从上到下依次被执行;
没有 static 关键字修饰的(如:实例变量[非静态变量]、非静态代码块)初始化实际上是会被提取到类的构造器中被执行的,但是会比类构造器中的代码块优先执行到,其也是按顺序从上到下依次被执行。
在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)

在装载类时,先装载父类A,再装载子类B

装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,按照代码中出现的顺序初始化)

装载子类B后,完成静态动作

类装载完成,开始进行实例化

在实例化子类B时,先要实例化父类A2,实例化父类A时,先成员实例化(非静态代码)
父类A的构造方法
子类B的成员实例化(非静态代码)
子类B的构造方法

先初始化父类的静态代码—>初始化子类的静态代码–>初始化父类的非静态代码—>初始化父类构造函数—>初始化子类非静态代码—>初始化子类构造函数

获取屏幕宽高

1
2
3
4
5
6
7
8
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
display.getRealSize(size);
} else {
display.getSize(size); }
width = size.x;
height = size.y;

这里对于4.0以上系统,且屏幕带有虚拟按键的 getSize() 获取到的是去除虚拟按键后的分辨率,如1080*1920的屏幕带有虚拟按键,使用此方法获取的值就会小一些 1080*1794。而使用 getRealSize() 则是完整的分辨率

为什么使用base64编码

https://www.zhihu.com/question/36306744/answer/71626823
https://segmentfault.com/q/1010000000801988/a-1020000002230260
简单的说:为了方便数据传输不出错。

在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

http://blog.csdn.net/sallay/article/details/3550740
Base64 编码是将 3 个字节共 24 位数据,以每 6 位一个 Base64 字符 [0-9a-zA-Z+/] 表示,24 位数据共需要 4 个 Base64 字符表示,编码后数据增长约 1/3。为什么是“约”?因为如果原数据字节数不是 3 的倍数,需要补位,这样转换出来的数据量就会比原来的 4/3 略多一点。
20M的数据通过Base64编码后大小大概为20M*133.3%=26.67M。

public class 和 class的区别

  1. 整个java文件只能有一个public修饰的类,可以有多个class
  2. 当有public修饰的类时,类名必须与文件名一致
  3. public修饰的类可以被包外访问,而class只能在包内访问
  4. 编译时如果有class,则会生成对应类的class文件,一个Java文件中有多个类则会生成多个class文件。当main方法在class中时,如果Java文件为Person.java,class名为Car,那么编译运行的步骤是:
    javac Person.java
    java Car.class
    因为生成的是Car.class,如果继续使用Person.java会报错

@和?的区别

“@” 符号用于引用系统和我们在项目中添加的一些固有资源(drawable,string 等),或者定义的 style 样式。当引用属于 Android SDK 中的系统字符串资源时,需要添加@android: 用来指明引用来源。

”?” 符号用于引用当前主题中定义的一些属性值。“?” 符号通过属性名字间接引用当前主题中的对应属性值,而不是属性本身。如 android:divider=”?android:listDivider”
“?” 符号通过属性名 android:listDivider 间接获取当前主题赋予该属性的值。如同 @android: 一般,?android: 表示该值源自 Android SDK 系统属性。由于在当前主题中寻找对应属性名的值,所以没有指定属性类型,其实等同于:?android:attr/listDivider。