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理论上无限
我很菜,,但我仍在努力…….
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件