junit 单元测试

java 注解 过时的 deprecated 压制警告 supresswarnings 覆盖父类的方法 override

XML

作用
① server client之间传递数据
② 数据保存
③ 配置文件

  1. <person name='' age=''> </person>
  1. <?xml version="1.0" encoding="utf-8"?> 必须在文档的第一行声明
  2. <根元素 属性=''>
  3. <a>
  4. <b>
  5. 北京
  6. </b></a>
  7. <c/>
  8. </根元素>
  9. <!---->
  10. <![cdata[]]>
  1. 格式良好xml文档 符合xml语法
  2. 有效的 符合约束文档的要求

    xml约束文档

    控制哪些标签可以出现 出现的次数 出现的顺序 标签的子元素的类型 哪些属性必须出现 可有可无
    属性取值 是否可以重复 取值范围
  • dtd .dtd
  • schema 格式 xml .xsd

对名称空间支持良好 namespace
android 布局文件 配置文件 使用schema约束

xml解析

获取工厂->获取解析器

  • dom 加载整个文档 树状结构 Document对象 可以修改文档
  • sax 一个元素一个元素的解析 xmlreader 设置一个处理器
  1. ContentHandler startDocument endDocument
  2. startElement endElement character xmlreader.parse();
  • pull 一个元素一个元素的解析
  1. setinput XMLPullParser.END_TAG, START_TAG START_DOCUMENTEND_DOCUMENT TEXT

①获取工厂

②获取解析器
③设置输入源
④获取事件类型

  1. int eventType = getEventType();
  2. while(eventType != END_DOCUMENT){
  3. switch(eventType){
  4. getName()->获取到元素的名字
  5. }
  6. eventType = parser.next();
  7. }
  8. paser.next();->解析下一个元素 并且返回事件类型

json 纯移动端项目

可以传递数据 保存数据 优势节省流量
JSONObject {‘key’:’{}’} String int long double boolean NULL JSONObject JSONArray
JSONArray[{},{}]

1. 1G~4G的介绍

G generation 代 1g 第一代无线通信技术 模拟网络 数字 信号差 不能发短信 安全性比较差
2G gsm cdma moto nokia 2017年关闭 gprs 128kbps Byte 16k 7 10k 20M symbain
3G wcdma cdma2000 3Mbps 100KB 10几倍 android iPhone iOS 硬件 电容屏 多点触控 手势操作
图片浏览 语音聊天
4G 比3g又提高了10几倍 2MB/s 网络直播 视频相关
5G nokia 4g提高了10几倍 20MB/s VR AR

2. Android操作系统的介绍

1.0 artroboys 铁壁阿童木
1.0 bate 发条机器人
1.5 吃的
5.0 棒棒糖
6.0 棉花糖
7.0 牛轧糖
android市场占有率 80%

3. Android系统版本介绍

4.0以下的系统版本没必要再支持了 市场占有率低于3%
4.4 5.0_5.1
最新7.0

4. Android系统结构

image.png

5. Android虚拟机介绍

java代码运行在虚拟机中
java标准的虚拟机 jvm dalvik dvm
image.png

art android runtime 替换 dalvik 4.4开始(可选的) 5.0开始 都换成了art

art 把翻译的工作提前 安装的时候 直接把字节码翻译成机器码 安装之后占磁盘空间比之前大了(用空间换时间)

dalvik 一边翻译一边执行

6. 开发环境的搭建 ADT SDK

7. sdkManager介绍

8. 模拟器的简介及创建

cpu架构 arm 公司只设计cpu 不生产具体的产品 卖授权 高通 骁龙 三星猎户座 华为 海思 联发科 mtk
intel x86 atom intel加速器
image.png

9 DDMS透视图

10 Android-helloworld

image.png

11 Android工程目录结构

image.png

  1. src java代码
  2. gen 自动生成的 R.java 不要手动修改
  3. Android4.3 创建项目是 指定compliesdk 用那个版本编译 最终就对导入那个android版本的jar
  4. Android Dependencies android的支持库 用来支持低版本的设备 使用较新的功能
  5. assets 资产目录 这个目录里存放的文件不会被编译
  6. bin 编译之后生成的文件都放到这个目录下
  7. libs 项目依赖的jar包可以放到这个目录
  8. res-> 资源目录
  9. drawable 图片
  10. layout 布局文件
  11. values-> dimens.xml 尺寸的声明
  12. strings.xml 项目中用到的字符串
  13. styles.xm 项目用到的主题和样式
  14. AndroidManifest.xml 清单文件

12 Android 打包过程

image.png
标志一个android项目的唯一性
①项目的包名
②项目的签名 keystore 文件不要丢 密码要记住 有效期要设置的时间长一些
Android Debug Bridge adb android调试桥

打包生成的文件apk

13 ADB指令练习

  1. adb start-server 开启adb服务
  2. adb kill-server 杀死adb服务
  3. adb uninstall + 包名 卸载应用 adb uninstall com.itheima.helloworld
  4. adb install + apk所在的路径 安装应用 adb install C:\Users\beibei\Desktop\1.apk
  5. adb push + pc文件路径 + android设备的路径 把电脑上的文件推到设备上 adb push C:\Users\beibei\Desktop\hello.txt sdcard/
  6. adb pull 设备上文件的路径 pc保存文件的路径 android设备上的文件保存到电脑上 adb pull sdcard/hello.txt C:\Users\beibei\Desktop\1.txt
  7. adb shell 可以进入到linux命令行 执行linux命令
  8. ls 列出所有文件
  9. cd 进入到某个文件夹
  10. rm 删除文件
  11. cat 显示文件内容
  12. mkdir 创建目录
  13. adb shell exit 可以返回windows命令行

14电话拨号器案例

①画UI user interface 画界面 layout->xml布局文件
②对着UI写JAVA代码
③ 部署到设备看效果

15 按钮的四种点击事件

①有名内部类

  1. private class MyonclickListener implements OnClickListener{
  2. @Override
  3. public void onClick(View v) {
  4. //当控件被点击的时候就会调用这个onclick方法
  5. //①获取用户的输入
  6. String number = et_number.getText().toString();
  7. //②判断用户输入是否为空
  8. if(TextUtils.isEmpty(number)){
  9. //如果为空 提示用户输入内容
  10. //Toast.makeText 向界面输出一个短暂的提示
  11. //第一个参数 上下文context Activity就是一个上下文 可以传入当前activity对象
  12. //第二个参数 要显示的提示文字
  13. //第三个参数 显示提示的时间长度 Toast.LENGTH_SHORT(显示的时长较短) Toast.LENGTH_LONG(显示时间稍长)
  14. //不要忘记要调用show()方法 显示这个Toast
  15. Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
  16. System.out.println("用户输入是空的");
  17. }else{
  18. //如果不为空 用获取的电话号码 打电话
  19. System.out.println("打电话:"+number);
  20. //Intent 意图 就是对要进行的操作的抽象描述
  21. Intent intent = new Intent();
  22. //给意图设置要操作的动作 打电话的动作 ACTION_CALL
  23. intent.setAction(Intent.ACTION_CALL);
  24. //给意图设置要携带的数据
  25. //URL 统一资源定位符 http:// ftp:// https:// abc://
  26. //uri 统一资源标示符 可以自定义协议 url 子类父类的关系
  27. Uri data = Uri.parse("tel:"+number);
  28. intent.setData(data);
  29. //开启打电话的activity(打电话的界面)
  30. startActivity(intent);
  31. }
  32. }
  33. }

②匿名内部类

  1. public class MainActivity extends Activity {
  2. private EditText et_number;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. //找到要操作的控件
  8. et_number = (EditText) findViewById(R.id.editText1);
  9. Button btn_call = (Button) findViewById(R.id.button1);
  10. //给按钮添加点击事件 匿名内部类
  11. btn_call.setOnClickListener(new OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14. //获取用户输入
  15. String number = et_number.getText().toString().trim();
  16. //判断输入是否为空
  17. if(TextUtils.isEmpty(number)){
  18. //为空提示用户
  19. Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
  20. }else{
  21. //不为空打电话
  22. Intent intent = new Intent();
  23. //指定动作
  24. intent.setAction(Intent.ACTION_CALL);
  25. //设置数据
  26. intent.setData(Uri.parse("tel:"+number));
  27. startActivity(intent);
  28. }
  29. }
  30. });
  31. }
  32. }

③Activity实现接口

  1. public class MainActivity extends Activity implements OnClickListener {
  2. private EditText et_number;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. // 把布局文件加载到界面上
  7. setContentView(R.layout.activity_main);
  8. // 找到关心的控件
  9. et_number = (EditText) findViewById(R.id.editText1);
  10. Button btn_call = (Button) findViewById(R.id.button1);
  11. Button btn2 = (Button) findViewById(R.id.button2);
  12. Button btn3 = (Button) findViewById(R.id.button3);
  13. btn_call.setOnClickListener(this);
  14. btn2.setOnClickListener(this);
  15. btn3.setOnClickListener(this);
  16. }
  17. @Override
  18. public void onClick(View v) {
  19. // View v 参数 当控件被点击的时候 被点击的对象就会作为参数传进来 可以通过控件的id进行区分
  20. int id = v.getId();
  21. switch (id) {
  22. case R.id.button1:
  23. String number = et_number.getText().toString().trim();
  24. if (TextUtils.isEmpty(number)) {
  25. Toast.makeText(this, "输入不能为空", Toast.LENGTH_SHORT).show();
  26. } else {
  27. Intent intent = new Intent();
  28. intent.setAction(Intent.ACTION_CALL);
  29. intent.setData(Uri.parse("tel:" + number));
  30. startActivity(intent);
  31. }
  32. break;
  33. case R.id.button2:
  34. Toast.makeText(this, "按钮2被点击", Toast.LENGTH_SHORT).show();
  35. break;
  36. case R.id.button3:
  37. Toast.makeText(this, "按钮3被点击", Toast.LENGTH_SHORT).show();
  38. break;
  39. }
  40. }
  41. }

第四种写法

16 Android中常用布局

  • Linearlayout 线性布局
  • RelativeLayout 相对布局
  • FrameLayout 帧布局 (框架布局)
  • TableLayout (表格布局)

使用频率
RelativeLayout> LinearLayout> FrameLayout >TableLayout