您的位置:首页 > 移动开发 > Android开发

Android杂记(一)

2016-12-17 18:34 323 查看

(一)Android操作系统简介

Android是安迪鲁宾团队开发的,最初用于数码相机,2005.08被谷歌收购

Android应用范围:手机,平板,智能家居,穿戴设备

(二)重要版本

Android2.3:早期最稳定的一个版本,支持前置摄像头

支持NFC(近距离无线传输),支持文本复制黏贴功能得到简化,增加电池应用监控

Android3.0:专为平板设计 fragment

Android4.1.2:4.x以后比较稳定的版本

Android5.0:新特性(Metrail Design)

Android6.0:运行时权限控制

Android7.0:私有目录被限制访问

(三)Android系统架构

应用层 Application ( java)

框架层 Application FameWork (java+jni)

函数库和运行时 (c/c++)

Linux 内核驱动

(四)两种虚拟机的不同

jvm:java虚拟机 sum公司

dvm;dalvik虚拟机 google公司

区别:

基于的架构不同,jvm是基于栈架构,栈是位于内存上的一个空间,再执行指令操作时,需要向cpu寻址,dvm是位于寄存器架构,寄存器是cpu的一部分,在执行指令操作的时候,无需寻址,直接执行,所以dvm更快

执行文件的格式不同,jvm执行的是多个.class文件而dvm执行的是一个.dex文件

(五)ART模式:Android runtime

程序在安转时需要预编译读取,将代码转化为机器码

优点:程序运行时无需实时转化,运行速度快

缺点:安转时间长,由于转换机码,内存占用略高。

(六)开发环境介绍

JDK: java deverloper kit

开发工具:eclipse AndroidStudio

Android SDK soft deverloper kit

adt:Android Deverloper tools

api level :19:4.4版本 18:4.3版本 11:3.0版本 10:2.3版本 8:2.2版本

aapt:Android application packagetool

dx.bat:将多个.class打包成一个.dex

add-ons:预留一个附加目录

build-tools:构建工具目录

docs:文档目录

extras:开发中额外提供的一些工具和jar

platforms:不同版本Android的核心jar

platforms-tools:平台一些相关工具

source:源码

systemimage:系统图片

tools:开发中使用的一些工具,如 9patch

(七)Android打包过程

.java—->.class—–>.dex—->apk—–>final apk

通过jdk把.java文件转化为.class文件 ,再通过dx.bat 转化为dex文件,再通过aapt生成apk,最后通过签名,得到final apk

IDE把整个过程实现了,安装了工具直接运行就行,不需要手动编译。

(八)常用adb(Android debug bridge)指令

ADB:建立手机与电脑的直接链接,需要配置环境变量

adb devices:列出当前电脑所连接的安全设备

adb push [pc-path] [phone-path]:将电脑端文件放到手机端

adb install [pc-path]:将电脑端文件安转到手机端

adb install -r [apk-path]:将电脑端文件强制安转到手机端

adb kill-service:杀死服务

adb start -service:开启服务

adb uninstall [package name]:卸载程序

netstart -oan:查看端口

adb shell:linux环境下,进入当前设置

adb shell logcat:查看系统运行日志

adb shell ls:查看当前设备目录

更多参考:[adb命令大全](http://zmywly8866.github.io/2015/01/24/all-adb-command.html)

(九)测试相关概念

测试分类:

按照测试是否知道源代码:黑盒测试:不知道代码 白盒测试:知道代码

按照测试的粒度:方法测试 集成测试 单元测试 系统测试

按照测试的暴力程度:冒烟测试【硬件】压力测试【使用人数多的时候】

第三方网站:百度云测,优测网,monkey测试:adb shell下的一个测试指令

步骤:cmd–>adb shell–>monkey

or:cmd–>adb shell–>monkey -p packageName

单元测试步骤:

1,创建一个类继承AndroidTestCase,那么该类就具备单元测试功能,

2,需要在AndroidMainifest中的application配置uses-library

<!--表示使用了Android中的函数库-->
<uses-library android:name="android.test.runner" />


3,在AndroidMainifest中配置,instrumentation

<!--表示我要测试那一个工程,下面targetPackage指定了测试那一个包-->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.layouttest" />


(十)存储使用应该注意的问题

不要使用硬性路径

通过
Context.getFileDir().getPath()
获取内部存储路径

通过
Enviroment.getExternalStorageDirectory().getPath();
获取外部存储的路径

权限问题:如果使用外部存储要添加外部存储权限

判断sd卡状态:通过
Enviroment.getExteralStorageState().equals(Enviroment.MEDTA_MONTED)
获取状态,返回boolean值

判断sd卡剩余存储空间

-先判断sd卡的存储空间是否满足文件存储:
File sdFile=Environment.getExternalStorageDir();


-sd卡目录作为一个文件对象,先获取文件的剩余空间

long useable=   sdFile.getUseableSpace();


-获取总共的空间

long totalSpace=   sdFile.getTotalSpace();


-私有目录和外部存储的区别

获取方式不一样

权限不一样

私有用于存放安全性高但是文件小,外部用于存放安全性低一些但是文件大的数据

(十一)文件的权限概念

linux下的文件权限由10位表示

第1位:文件类型

2-4位:该文件所属用户对文件的权限

5-7位:该文件所属用户组对本文件的权限

8-10位:其他用户对该文件的权限

rwx是用二进制表示,如果是就用0,如果不是就用1,再把二进制转换为十进制

(十二)SharedPreferenced数据存储

参考我的另一篇文章[Android复习之SharedPreferences](http://blog.csdn.net/cdhahaha/article/details/52734388)

(十三)Android下的数据库创建

什么时候使用数据库存储数据?答案是当数据库数据量大的时候

创建数据库步骤:

- 创建数据库类继承SqliteOpenHelper,实现pnCreate和onUpgrade两个方法,

- 创建一个帮助类调用getReadable方法,会帮助我们创建数据库

- 复写onCreate方法和onUpgrade方法,onCreate方法是表初次创建时调用,适合做表结构的初始化,onUpgrade是在版本号发生改变时调用,适合做表结构的修改。

(十四)Android下数据库的增删改查

第一种方式:

创建一个帮助类对象,调用getReadableDataBase方法返回一个SqliteDataBase方法,使用这个对象调用exesql做增删改查,调用rawquery方法做查询

特点:增删改没有返回值,不能判断sql是否执行成功,而且sql语句容易写错

第二种方式:

创建帮助类对象,调用getReadableDatabase方法返回一个SqliteDatabase对象,通过这个对象调用insert,update,query,delete做增删改查

特点:增删改查有返回值,可以判断操作是否成功,但是查询不够灵活,不能做多表查询,在公司增删改用第二种,查询用第一种

(十五)数据库中的事务

事务:执行多条sql语句,要么同时执行成功,要么同时执行失败,不能有成功有失败

eg:银行转账,要么转成功,要么转失败,不能有一方已经转账,而另一方未收到款的情况

db.beginTransation()//开启一个数据库事务

db.setTransitionSuccessful();//标记语句全部执行成功

db.endTransation();//判断事务的标记是否执行成功,如果不成功回滚之前的语句

有关数据库的基础知识可参照我的另外一篇文章Android学习之sql基础使用

(十六)消息机制的写法和主要元素

消息机制的写法

1,在主线程中创建一个Handler对象并重写handlMessage(Message msg)方法

2,在子线程中创建Message对象,把数据封装到message中,可通过bundle封装也可以通过msg.what,msg.obj,调用handler的sendMessage方法把message传入到主线程的handleMessage(Message msg)方法中的Message参数中,通过这个参数获取子线程的中message封装的数据,进行ui的更新等操作。

消息机制的主要元素

Message:用来携带子线程中的数据

MessageQueue:用来存放所有子线程发出的Message

Handler:用来在子线程发出消息,在主线程接收消息

Looper:是一个消息循环器,循环遍历MessageQueue,从MessageQueue中取出Message指派给handler处理

(十七)其他消息处理方式

子线程一定不能更新ui?

不是的,sufaceView可以在子线程更新ui,progressBar相关控件也可以在子线程更新UI,Android中有审计机制,activity完全显示时,审计机制才会去检查子线程有没有更新UI,所以如果这个更新UI的时间较短,比如40毫秒以内,此时即使在子线程更新UI也不会报错,因为审计机制还来及不检查,就已经更新完了。

使用activity的runOnUIThread()方法更新ui,无论当前线程是子线程还是主线程,都将在子线程中执行

(十八)get与post的区别

请求的url地址不同

请求头不同:post方式多了请求头:

content-length

cache-control

origin

……

post方式还多了请求内容

请求时携带的内容大小不同,get1k,post理论上无限

我很菜,,但我仍在努力…….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息