基本架构
Linux内核层
提供各种硬件驱动,显示、音频、相机、蓝牙驱动等。
系统运行时库
系统特性支持,如SQLite数据库,OpenGL|ES库提供了3D绘图支持,WebKit提供浏览器内核支持。
还有Android运行时环境,主要提供了一些核心库,该环境中还有Dalvik虚拟机或者ART虚拟机。
应用层框架
给运行于系统之上的APP提供API,系统内置软件和开发者开发的软件都是条用应用层的框架。
应用层
用户下载的软件就是所处该层面。
四大组件
Activity:活动
直接与用户进行交互的界面,也就是能看到的都是处于Activity中。
Service:服务
可以在用户退出应用后依然保持运行,例如音乐播放。
Brodcast Provider:广播接收器
接受电话短信,或者厂商的消息推送等。
Content Provider:内容提供器
应用程序间共享,比如你下载某个软件需要读取系统电话簿中的联系人。
Activity
新建活动
创建Activity的步骤如下:
- 首先创建视图,即布局文件layout;
- 给activity中加载layout;
- 在manifest文件中注册活动。
如下:
创建布局:
1 |
|
加载布局:
1 |
|
注册活动:
1 | <!--创建活动3:在manifest文件中注册活动,给主活动指定的label不仅会成为标题中的内容,也会成为启动器中显示的名称--> |
新建menu
步骤:
- 新建菜单布局文件;
- 创建菜单;
- 对菜单事见进行响应。
新建菜单布局文件:
1 |
|
创建菜单-在活动中重写onCreateOptionsMenu方法:
1 |
|
对菜单的每个item进行响应-重写onOptionsItemSelected方法:
1 |
|
活动交互
显式intent
1 |
|
隐式intent
1 | <activity android:name=".SecondActivity"> |
活动中的action名字和category名字要和manifest.xml中的一致:
1 |
|
隐式intent还有其他用法,例如使用一些系统内置action,会调用浏览器打开百度主页:
1 | //使用action_view的action |
或者新建自定义活动用来响应http数据协议:
1 | <!--自定义第三个活动用来响应http数据协议,注意:只有当category包含BROWSABLE类型时,acheme才可以为http--> |
这样一来,当点击按钮的时候在选择列表中就可以看到自己的应用程序,当然它打开的只是第三个活动,而不能显示百度主页。
还可以使用tel协议打开拨号界面:
1 | Intent intent = new Intent(Intent.ACTION_DIAL); |
intent传递数据
活动之间通过intent传递数据;
1 | //第一个活动放入数据 |
取数据:
1 |
|
intent返回数据
还可以在第二个活动中给第一个活动返回数据,首先需要修改第一个活动的启动方式:
1 | //第一个活动放入数据 |
第二个活动里放入返回数据:
1 | Intent resultIntent = new Intent(); |
重写第一个活动的方法来接收返回参数:
1 |
|
可以重写onBackPressed方法来当用户按下返回键的时候返回数据:
1 |
|