Noobzhang

  • 首页

  • 标签

  • 分类

  • 归档

Java 静态内部内

发表于 2017-04-11 | 更新于 2019-03-08 | 分类于 Java

https://www.cnblogs.com/Alex--Yang/p/3386863.html

RK平台Android分区大小修改说明

发表于 2017-04-11 | 更新于 2019-03-08 | 分类于 Android

不同于一般的Android系统(一般Android系统分区信息在BoardConfig.mk BoardConfigCommon.mk中),RK平台的分区信息文件在自带的烧录工具包中的parameter文件中

阅读全文 »

Hexo入手

发表于 2017-04-07 | 更新于 2019-03-08 | 分类于 Others

1. 安装Git和node.js

从官网下载对应平台binary 包,安装(linux直接将bin lib目录的文件cp到usr/local对应目录下,Window直接点击安装)
Ubuntu平台:
    sudo apt-get install git-core
    curl https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh
    安装完成后,重启终端并执行下列命令即可安装 Node.js。
    nvm install stable
Windows平台:
    下载并安装 https://git-scm.com/download/win
    下载并安装https://nodejs.org/en/download/

2. 安装hexo

npm install hexo-cli -g   //终端或者cmd命令行
阅读全文 »

Android fstab介绍

发表于 2017-04-07 | 更新于 2019-03-08 | 分类于 Android

ubuntu fstab文件格式

下面是/etc/fatab文件的一个示例行:
fs_spec     fs_file fs_type     fs_options  fs_dump    fs_pass
/dev/hda1   /       ext2        defaults    1          1    

fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为
          /dev/hdaXN,X是IDE设备通道 (a, b, or c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:
         例 如:`knuth.aeb.nl:/'。对于procfs,使用`proc'来定义。
fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来
          表示空格。
fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext2 (linux设备的常用文件类型)、vfat(Windows系统的fat32格
          式)、NTFS、iso9600等。
fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用"defaults"
             就可以满足需要。其他常见的选项包括:
            选项含义:
            ro      以只读模式加载该文件系统
            sync    不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度
            user    允许普通用户加载该文件系统
            quota   强制在该文件系统上进行磁盘定额限制
            noauto  不再使用mount -a命令(例如系统启动时)加载该文件系统

fs_dump 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0
fs_pass 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,
                    其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0
阅读全文 »

Java enum

发表于 2017-01-01 | 更新于 2019-03-06 | 分类于 Java

1. enum 基本概念和用法

enum Color { RED,BLUE,BLACK YELLOW,GREEN}; //创建时自动继承java.lang.Enum这个类

   (1)  ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。  
             Color.RED.ordinal();  //返回结果:0
             Color.BLUE.ordinal();  //返回结果:1
   (2)  compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。
                         当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。(具体可见源代码)
             Color.RED.compareTo(Color.BLUE);  //返回结果 -1
   (2)  equals()方法: 比较两个枚举类对象的引用。
   (3.1)  values()方法: 静态方法,返回一个包含全部枚举值的数组。
             Color[] colors=Color.values();
             for(Color c:colors){ System.out.print(c + ","); }//返回结果:RED,BLUE,BLACK YELLOW,GREEN,
   (3.2)  toString()方法: 返回枚举常量的名称。
             Color c=Color.RED;
             System.out.println(c);//返回结果: RED
   (3.2)  name()方法: 返回枚举实例声明时的名字String //"RED","BLUE","BLACK" "YELLOW","GREEN"
   (5)  valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。
             Color.valueOf("BLUE");   //返回结果: Color.BLUE
   (8)  getDeclaringClass()方法: 返回该enum变量所属Class<E>

总结:

1. enum -> int:    
    int i =  enumValue.ordinal(); // enumValue = Color.RED;
    int i = Color.ordinal();

2. int -> enum:    Color b = Color.values()[i]; // int i = 0 1 2 3 4;

3. enum -> String:   
    String s = enumValue.name();    //enumValue = Color.RED;
    String s = enumValue.toString(); //enumValue = Color.RED;
    String s = Color.RED.name();
    String s = Color.RED.toString();
4. String -> enum:   enumType.valueOf(name); //name = "RED"

2. enum类实现原理及扩展

final class enum Color extends java.lang.Enum {
enum RED(“红色”), //自带实例,在类前部定义
enum BLUE(“蓝色”), //自带实例,在类前部定义
enum BLACK(“黑色”), //自带实例,在类前部定义
enum YELLOW(“黄色”), //自带实例,在类前部定义
enum GREEN(“绿色”); //自带实例,在类前部定义,最后一个需要加分号

//todo 可新增成员变量和成员方法 及 构造函数
private Color (String description) { //此处需要声明为private,就算不声明,只用于自带实例进行构建,在外部不能构建???
    this.description = description;
}
private String description;
public String getDescr() { return description;}
public static void main(String[ args]) {
    for (Color c : Color.values()) {
        System.out.println(c + ": " + c.getDescr());
    }
}

};

//Output:
RED: 红色
BLUE: 蓝色
BLACK: 黑色
YELLOW: 黄色
GREEN: 绿色

Input系统——APP事件监听及处理

发表于 2017-01-01 | 更新于 2019-03-08 | 分类于 Android

InputDevice
https://developer.android.com/reference/android/view/InputDevice.html

android.support.wearable 包

http://stackoverflow.com/questions/24520240/import-android-support-wearable-cannot-be-resolved

阅读全文 »

Android 智能指针——SP WP

发表于 2017-01-01 | 更新于 2019-03-08 | 分类于 Android

待续…

阅读全文 »

Android版本-sdk-ndk-对应关系表

发表于 2016-12-12 | 更新于 2019-03-08 | 分类于 Android
Code name Version API level Rlease Date Kernel
Pie 9 API level 28 2018/8/6 4.4.107, 4.9.84, and 4.14.42
Oreo 8.1 API level 27 2017/12/21 4.10
Oreo 8.0 API level 26 2017/8/21 4.10
Nougat 7.1 API level 25 2016/11/16 4.4.1
Nougat 7.0 API level 24 2016/8/22 4.4.1
Marshmallow 6.0.1 API level 23 2015/12/15
Marshmallow 6.0 API level 23 2015/10/5 3.18.10
Lollipop 5.1.1 API level 22 2015/4/21
Lollipop 5.1 API level 22 2015/3/9 3.16.1
Lollipop 5.0 API level 21, NDK 10 2014/11/12 3.16.1
KitKat 4.4 - 4.4.4 API level 19 2013/10/31 3.10
Jelly Bean 4.3.x API level 18 2013/10/3 3.4.39
Jelly Bean 4.2.x API level 17 2013/2/11 3.4.0
Jelly Bean 4.1.x API level 16 2012/7/9 3.0.31
Ice Cream Sandwich 4.0.3 - 4.0.4 API level 15, NDK 8 2012/3/29 3.0.1
Ice Cream Sandwich 4.0.1 - 4.0.2 API level 14, NDK 7 2011/10/18 3.0.1
Honeycomb 3.2.x API level 13 2.6.36
Honeycomb 3.1 API level 12, NDK 6 2.6.36
Honeycomb 3.0 API level 11 2011/2/22 2.6.36
Gingerbread 2.3.3 - 2.3.7 API level 10 2.6.35
Gingerbread 2.3 - 2.3.2 API level 9, NDK 5 2010/12/6 2.6.35
Froyo 2.2.x API level 8, NDK 4 2010/5/20 2.6.32
Eclair 2.1 API level 7, NDK 3 2.6.29
Eclair 2.0.1 API level 6 2.6.29
Eclair 2.0 API level 5 2009/10/26 2.6.29
Donut 1.6 API level 4, NDK 2 2009/9/15 2.6.29
Cupcake 1.5 API level 3, NDK 1 2009/4/27 2.6.27
(no code name) 1.1 API level 2 2009/2/9 2.6
(no code name) 1.0 API level 1 2008/12/23 ?

References:
https://en.wikipedia.org/wiki/Android_version_history

Android init.rc

发表于 2016-11-25 | 更新于 2019-03-08 | 分类于 Android

init.rc主要有两大元素: Actions和Service

一种是定时任务——Actions,由以下构成:
on


…

一种是固定顺序的任务(初始化启动,可以重启),即Services
service [ ]*

阅读全文 »

Android 中同步和并发实现的几个方式

发表于 2016-10-21 | 更新于 2019-03-08 | 分类于 Android

1. 关键字synchronized

实例方法同步/静态方法同步
class Demo{
public synchronized void print(){ //实例方法
System.out.println(“print”);
}
public static synchronized void print2(){ //静态方法
System.out.println(“print2”);
}
}
Demo demo1; //同一时间段只能有一个线程可以访问demo1.print
Demo demo2; //可以同时访问demo1.print 和 demo2.print
//同一时间段只能有一个线程可以访问demo1.print2 或者 demo2.print2

实例方法中同步块 //分为对象锁和全局的Class锁,
静态方法中同步块 //只有全局锁

static synchronized方法也相当于全局锁synchronized(xxx.class) 如果{}范围相同的话
synchronized方法也相当于synchronized(this) 如果{}范围相同的话

2. 类java.util.concurrent.locks.ReentrantLock (比synchronized 功能更全更灵活, 还多了锁投票,定时锁等候和中断锁)

lock() 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
tryLock() 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
tryLock(long timeout,TimeUnit unit)
如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
lockInterruptibly
如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断

异同:
synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中

在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;

3. AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference:

在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。
区别:
和上面的类似,不激烈情况下,性能比synchronized略逊,而激烈的时候,也能维持常态。激烈的时候,Atomic的性能会优于ReentrantLock一倍左右。但是其有一个缺点,就是只能同步一个值,一段代码中只能出现一个Atomic的变量,多于一个同步无效。因为他不能在多个Atomic之间同步。

4. 特殊域变量(volatile)实现线程同步

a.volatile关键字为域变量的访问提供了一种免锁机制, 
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, 
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值 
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量 

5. 使用局部变量实现线程同步

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,
副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

明天看下ThreadLocal

1…345…8

Jin

77 日志
9 分类
113 标签
© 2019 Jin
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Mist v7.0.0