目录:
Android系统架构
Android应用开发特色
Project 介绍
项目运行过程
剖析 res 中的资源
如何使用这些资源?
详解 build.gradle 文件
Android 的日志工具 Log
Toast
Menu
Intent
活动的生命周期
Android系统架构
大致四层:Linux内核层、系统运行库存、应用框架层和应用层
Android应用开发特色
1.四大组件
活动 Activity
服务 Service
广播接收器 Broadcast Receiver
内容提供器 Content Provider
2.系统控件
3.SQLite 数据库
轻量级、运算速度快的嵌入式关系型数据库
4.多媒体
音乐、视频、录音、拍照、闹钟
5.定位
Project
1. .gradle 和 .idea
AS自动生成的一些文件,暂不管
2.app
代码,资源都在这
3.build
编译时自动生成的文件
4.gradle
gradle wrapper 的配置文件
5.gitignore
用来将指定的目录或文件排版在版本控制之外的 (这两天没有在意)
6.build.gradle
项目全局的 gradle 构建脚本,通常不需要改
7.gradle.properties
全局的 gradle 配置文件,这里配置的属性会影响项目中所有的 gradle 编译脚本
8.gradlew 和 gradlew .bat
用来在命令行界面中执行 gradle 命令的,其前者是在 Linux或Mac系统中使用,后者Windows
9.HelloWorld.iml
10. local.properties
11.settings.gradle
所以,前面的都是废话,重点 是 2.app
1.build
编译时自动生成的文件
2.libs
如果项目中使用第三方 jar 包,就需将它放在此下,放这会被自动添加到构建路径里去(这个有用到,我在导入百度地图的LBS Ctrl v 了)
3.androidTest
编写 Android Test 测试用例的,可以对项目进行一些自动化测试。(这两天没用到)
4.java
所有Java代码的放置地,默认 MainActivity (核心啊)
5.res
项目所用所有图片(drawable)、布局(layout)、字符串(values)等资源都在此
(布局用到过,添加过 button TextView)
6.AndroidManifest.xml
整个Android项目的配置文件,四大组件都在这注册,添加权限声明
(加过权限和key) (注意 M a n i fest ,之前还以为写错了)
7.test
编写 Unit Test 测试用例的,对项目进行自动化测试的另一种方式
8. .gitignore
9.app.iml
Intellij IDEA 项目自动生成的文件,
10.build.gradle
app 模块的 gradle 构建脚本,此文件会指定很多项目构建相关的配置(因为权限试着改过这里的编译环境等,然无卵用)
11.proguard-rules.pro
(竟然是此意,遇到过问题博客说加个代码在此,并无卵)
项目运行过程
打开 AndroidManifest.xml
Android 程序设计讲究逻辑和视图分离,所以在布局文件中编写界面,然后在活动中引入。
剖析 res 中的资源
res 目录下:
drawable开头的文件夹 图片
mipmap开头的文件集 图标
values 字符串、样式、颜色
layout 布局文件
为啥要那么多 mipmap 那
如何使用这些资源?
例如打开 res/values/strings.xml
不造为啥复制不过来~~~
两个方法引用它:
1. 代码中 R.string.hello_world 可以获得该字符串的引用
2.在 XML 中 @string/hello_world 可以获得该字符串的引用
(其中string 可换,图片 drawable、图标 mipmap、布局 layout,以此类推)
例如:
详解 build.gradle 文件
HelloWorld 项目中有两个 build.gradle
我当前的是 2.2.3
compileSdkVersion 26 编译版本 26对应 Android 8.0 系统的 SDK 编译
buildToolsVersion "26.0.1" 构建工具的版本
minSdkVersion 15 最低兼容的 Android 系统版本 15对应 4.0 的系统
targetSdkVersion 26
!!!!就是这个东西把我坑的,简直了!!!!!
buildTypes
dependencies 闭包
可以指定项目所有的依赖关系,通常有三种依赖方式:
1.本地依赖(compile fileTree) 对本地Jar 包或目录添加依赖关系
2.库依赖(compile project) 项目中的库模块添加依赖关系
3.远程依赖(compile) jcenter库上的开源项目添加依赖关系
Android 的日志工具 Log
****************************************
想起前两天:
我:彬哥,我程序闪退
彬哥:看下log,搜fatal
我:……黑人问号脸
***************************************
Log (android.util.Log),此类提供5个方法来打印日志:
在setContentView(R.layout.activity_main); 下添加如下语句:
Log.d("MainActivity","onCreate execute");
logcat 即可看到如下信息:
08-25 02:26:17.668 2547-2547/com.example.yanchengwei.helloworld D/MainActivity: onCreate execute
为何使用 Log 而不用 System.out?
日志打印不可控制、打印时间无法确定、不能继续添加过滤器、日志没有级别区分
Toast
Android 系统提供的一种提醒方式,在程序中可以使用它将一些短小的信息通知给用户,此信息一段时间后自动消失,并且不会占用屏幕空间
******大概代码*************************
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(newView.OnClickListener(){
@Override
public voidonClick(View v){
Toast.makeText(FirstActivity.this,"You clicked Button 1",
Toast.LENGTH_SHORT).show();
}
});
*********************************
findViewById() 获取到在布局文件中定义的元素,传入R.id.button_1 ,来得到按钮的实例
Menu(P38)
销毁一个活动:
按下Back,或者 finish()
Intent
可以在活动之间穿梭,分为显式和隐式
1.使用显式 Intent
在 FirstActivity 活动基础上打开 SecondActivity ,通过startActivity() 方法来执行 Intent。
效果:FirstActivity 界面点击 按钮,跳转到了 ActivityTest
2.使用隐式 Intent
合适的活动,简单理解 可以响应我们这个隐式 Intent 的活动
活动的生命周期
号称深入理解就可以写出流程的程序,合理管理应用资源方面发挥的游刃有余,你的应用程序将会拥有更好的用户体验~~~很叼的样子
返回栈
活动状态
每个活动在其生命周期最多可能会有4种状态。
1.运行状态:一个活动位于返回栈栈顶时,即运行状态。
2.暂停状态:当活动非在栈顶,但仍然可见时,即进入暂停状态。并不是每个活动都会占满整个屏幕的,比如对话框形式的活动只会占屏幕中间部分区域。处于此态仍完全是存活的,系统也不愿去回收这种活动(因为可见,回收的东西都会在用户体验方面有不好的影响),只有内存极低的情况下,系统才会去考虑回收这种活动。
3.停止状态:
4.销毁状态:活动从返回栈中移除后就变成了销毁状态。系统会最倾向于回收这种状态的活动,从而保证手机的内存充足。
活动的生存期
Activity 类中定义了 7 个回调方法,覆盖了活动生命周期的每个环节
活动的启动模式
四种:standard、singleTop、singleTest、singleInstance
1.standard
2.singleTop
3.singleTest
4.singleInstance
最特殊最复杂~不同于以上三个,指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。
活动的最佳实践
以上,未完
写在最后:
简单总结下这两天的进度,如果按照产出来看的话,几乎无进度~
这周开始做Android的小Demo,有点操之过急,下载的Demo也运行不起来,一直在折腾关于Android 6.0之后的动态权限问题,然后,,GPS现在还没有正确的显示出来,这就很尴尬了~
至于收获,知道了发布流程,电脑的SHI1值及如何获取key,有了个大概的认识。
马上开始具体的点学习,一边学习小的知识点,一遍尝试继续做Demo。
【一首歌 】【信仰-张信哲】
前些天现场听得,再次点开这首歌竟然有了不一样的感觉~
爱是一种信仰,龙瞎也是,HelloWorld 大概也是吧~