Android Stuido 快捷键

2014-12-24 20:22:00 by suphy

Android Stuido 快捷键

查找

  1. Cmd + K 快速定位到下一个使用该变量的地方
  2. Shift + Cmd + K 快速定位到上一个使用该变量的地方
  3. Ctrl + H 查找功能,全局查找
  4. Shift + Cmd + G 查找变量或方法被用到的地方
  5. Option + Cmd + Q, S 查找

功能

  1. F3 , Cmd + 鼠标点击 打开声明
  2. Option + / 代码提示
  3. Option + Shift + / 智能类型变量完成
  4. Ctrl + Option + / 类名提示
  5. Cmd + / 行注释
  6. Ctrl + CMD + / 快注释
  7. Shift + CMD + F 格式化代码
  8. CMD + I 自动行缩进
  9. Shift + CMD + O 优化导入包
  10. CMD + E 查看最近打开过的文件
  11. CMD + Shift + E 查看最近编辑过的文件
  12. double Shift:全局查找,这个查看和Ctrl + H稍稍有些不同,这个是全局文件查找
  13. CMD + O 快捷查找当前类中的函数,变量

Plugin

  1. Cmd-Shift-D 使用Dash查询方法文档

Java线程同步

2014-12-24 20:20:00 by suphy

Java线程同步

@(java)[synchronized|wait|notify|notifyAll] Author: 白万伟 Date: 2014-09-09

对象锁

对象指的是拥有synchronized修饰的函数,或者是代码块的一个类的实例.

当某个线程访问该类的方法或synchronized修饰的代码快时就要获得该对象的锁,其他线程就无法获得该对象的锁。 也就是说这个对象已经被前一个线程所占用,另外的线程无法得到该对象,所以该对象对应的方法也就无法访问,必须等到前一个线程释放对象锁才可能有机会得到对象锁。

  1. java中的每个对象都有一个锁,当访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任何线程都无法在去访问该syncronized 方法了,直到之前的那个线程执行方法完毕后,其他线程才有可能去访问该synchronized方法。

  2. 如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到某个synchronzed方法,那么在该方法没有执行完毕前,其他线程无法访问该对象的任何synchronzied 方法的,但可以访问非synchronzied方法。

  3. 如果synchronized方法是static的,那么当线程访问该方法时,它锁的并不是synchronized方法所在的对象,而是synchuronized方法所在对象的对应的Class对象,因为java中无论一个类有多少个对象,这些对象会对应唯一一个Class 对象,因此当线程分别访问同一个类的两个对象的static,synchronized方法时,他们的执行也是按顺序来的,也就是说一个线程先执行,一个线程后执行。

在同步方法中线程间的通信主要依靠wait() notify() notifyAll()来实现, 而且这三个方法必须在synconized代码块中使用 ...

read more

Anroid4.4新增/system/priv-app/目录的权限问题

2014-12-24 20:19:00 by suphy

Anroid4.4新增/system/priv-app/目录的权限问题

@(Android)[permission]

今天在项目中定义permission时使用了android:protectionLevel="signatureOrSystem", signatureOrSystem官方解释

A permission that the system grants only to applications that are in the Android system image or that are signed with the same certificate as the application that declared the permission

该项目设置如下并且在/system/app/文件中:

//AndroidManifest.xml ...
read more

BluetoothAdapter使用

2014-11-22 10:52:00 by suphy

Android Quick Look: BluetoothAdapter

Android SDK附带强大的蓝牙适配器,蓝牙api能够管理本地扫描附近的蓝牙设备,蓝牙设备之间传输数据,等等。本指导将向您展示最基本的必要步骤开始在Android SDK编程蓝牙应用程序。

Step 1: Import the Bluetooth Package

import android.bluetooth.*;

Step 2: Set Bluetooth Permissions

添加permission:

<uses-permission android:name="android.permission.BLUETOOTH" />

对于更高级的蓝牙任务,如设置本地设备为我们将在本教程的名字,你就需要配置蓝牙管理员权限。添加以下行这样做:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Step 3: Access the Bluetooth Adapter ...

read more

ThreadPoolExecutor运转机制详解

2014-11-22 10:48:00 by suphy

ThreadPoolExecutor运转机制详解

@(Java)[Thread|ThreadPool]

先看一下新建一个ThreadPoolExecutor的构建参数:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

具体流程如下:

  1. 当池子大小小于corePoolSize就新建线程,并处理请求

  2. 当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去从workQueue中取任务并处理

  3. 当workQueue放不下新入的任务时,新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize就用RejectedExecutionHandler来做拒绝处理

  4. 另外,当池子的线程数大于corePoolSize的时候,多余的线程会等待keepAliveTime长的时间,如果无请求可处理就自行销毁

内部结构如下所示:

Alt text

从中可以发现ThreadPoolExecutor就是依靠BlockingQueue的阻塞机制来维持线程池,当池子里的线程无事可干的时候就通过workQueue.take()阻塞住。

Executors类使用ExecutorService提供了一个 ThreadPoolExecutor的简单实现,但 ThreadPoolExecutor 提供的功能远不止这些 ...

read more

OBD-II PIDs

2014-06-14 16:37:00 by suphy

OBD-II PIDs

OBD-II PIDs是用于从车辆请求数据的代码,用作诊断工具。

名词解释:

  • DTC: Diagnostic Trouble Codes 故障诊断码
  • HEV: hybrid electric vehicle 混合动力电动汽车
  • MIL: malfunction indicator lamp 故障指示灯
  • ECU Electronic Control Unit 电子控制单元

  • BCD: Binary-Coded Decimal 二进制码十进制数或二-十进制代码,用4位二进制数来表示1位十进制数中的0~9这10个数码

Modes:

Mode (hex) Description
01 显示当前数据
02 显示冻结帧数据
03 显示存储诊断故障代码
04 清除诊断故障代码和存储值
05 测试结果,氧传感器监测
06 测试结果 ...
read more