Android杂记(一)

(一)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理论上无限

我很菜,,但我仍在努力…….

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值