安卓复习

基础知识

1, 移动设备操作系统

iOS

Windows Phone

Android

2, 安卓平台的技术架构

Linux 内核层

中间层: 程序库, Android 运行时环境

应用程序框架

应用层: 应用程序

3, Activity 通常就是一个单独的屏幕

4, 简述 Android 的优势

1, 系统的开放性和免费性

2, 移动互联网的发展

3, 相关厂商的大力支持

Activity 的生命周期

Activity 具有生命周期, 在生命周期的过程中共有四种状态:

1, 激活或者运行状态: 此时 Activity 运行在屏幕的前台

2, 暂停状态: 此时 Activity 失去了焦点, 但是仍然对用户可见, 例如在该 Activity 上遮挡了一个透明的或者非全屏的 Activity

3, 停止状态: 此时 Activity 被其他 Activity 完全覆盖

4, 终止状态: 此时 Activity 会被系统清理出内存

处于暂停状态和停止状态的 Activity 仍然保存了其所有的状态和成员信息, 直到被系统终止, 当被系统终止的 Activity 需要重新显示的时候, 它必须重新启动, 并且将关闭之前的状态全部恢复回来

Activity 从一个状态运行到另一个状态, 状态改变时会执行相应的生命周期方法

方法 功能描述 下一个方法
onCreate( ) Activity 初次创建时被调用, 在该方法中一般进行一些静态设置, 如创建 view 视图, 进行数据绑定等. 如果 Activity 是首次创建, 本方法执行完以后将会调用 onStart( )方法, 如果 Activity 是停止后重新显示泽调用 onRestart( ) 方法 onStart()或onRestart()
onStart( ) 当 Activity 即将对用户可见时调用 onRestart()或onResume()
onRestart() 当 Activity 从停止状态重新启动时调用 onResume()
onResume() 当 Activity 将要与用户交互时调用此方法, 此时 Activity 在 Activity 栈的栈顶, 用户输入的信息可以传递给它. 如果其他的 Activity 在它的上方恢复显示, 则调用 onPause()方法 onPause( )
onPause( ) 当系统要启动一个其他的 Activity 之前, 这个方法将调用, 用于提交持久数据的改变, 停止动画等待 onResume()或onStop()
onStop( ) 当另外一个 Activity 恢复并遮挡住当前的 Activity, 导致其对用户不可见时, 该方法被调用 onStart()或onDestroy()
onDestroy() 在 Activity 被销毁前调用的最后一个方法

Android 重点知识回顾_第1张图片

Activity 的生命周期还可以根据不同的标准分为:

完整生命周期:

从Activity 最初调用 onCreate()方法到最终调用 onDestroy()方法的这个过程称为完整生命周期

可见生命周期:

从 Activity 调用 onStart()方法开始, 到调用对应的 onStop()方法为止的这个过程称为可见生命周期

前台生命周期:

从 Activity 调用 onResume()方法开始, 到调用对应的 onPause()方法为止的这个过程称为前台生命周期

使用图片资源设置 Activity 的背景

新建 Android 项目, 复制图片到res/drawable-mdpi目录下, 编辑布局文件 res/layout/activity_main.xml

代码如下:

android:background="@drawable/td"

其中 td 为图片名称

练习

1, Activity 生命周期中的 onStart( ) 方法用于 Activity 初次创建时被调用

2, 暂停状态下的 Activity 失去了焦点, 但是依然对用户可见

3, Activity 的可见生命周期是 从 onStart() 到 onStop() 的这个过程

4, Android 程序不能直接访问的资源(原生文件)存放在 assets 目录

5, 简述 Activity 的生命周期的各个方法

onCreate(): Activity 初次创建时被调用, 在该方法中一般进行一些静态设置, 例如: 创建 View 视图, 进行数据绑定等

onStart(): 当 Activity 对用户即将可见时被调用

onRestart: 当 Activity 从停止状态重新启动时被调用

onResume(): 当 Activity 将要与用户交互时调用此方法

onPause(): 当系统要启动一个其他的 Activity 时被调用

onStop(): 当一个 Activity 恢复并遮盖住当前的 Activity, 导致其对用户不可见时被调用

onDestroy(): 在 Activity 被销毁前调用的最后一个方法

事件处理机制

Android 系统中引用 Java 的事件处理机制, 包括事件, 事件源和事件监听器三个事件模型

1, 事件(Event):

是一个描述事件源状态改变的对象, 事件不是通过 new 运算符创建的, 而是由用户操作触发的. 事件可以是键盘事件, 触摸事件等. 事件一般作为事件处理方法的参数, 以便从中获取事件的相关信息

2, 事件源(Event Source):

产生事件的对象, 事件源通常是 UI 组件, 例如单机按钮, 则按钮就是事件源

3, 事件监听器(Event Listener):

当事件产生时, 事件监听器用于对该事件进行响应和处理. 监听器需要实现监听接口中定义的事件处理方法

Android 中常用的事件监听器如下所示, 这些事件都定义在 android.view.View

事件监听器接口 事件 说明
OnClickListener 单击事件 当用户单击某个组件或者方向键
OnFocusChangeListener 焦点事件 组件获得或失去焦点时产生的事件
OnKeyListener 按键事件 用户按下或者释放设备上的某个按键
OnTouchListener 触碰事件 设备具有触摸功能时, 触碰屏幕时产生
OnCreateContextMenuListener 创建上下文菜单事件 创建上下文菜单时产生该事件
OnCheckedChangeListener 选项事件 选择改变时触发该事件

实现事件处理的步骤如下:

1, 创建事件监听器

2, 在事件处理方法中编写事件处理代码

3, 在相应的组件上注册监听器

对话框和提示信息(Toast)

提示信息(Toast)

提示信息(Toast)是 android 中用来显示提示信息的一种机制, 与对话框不同, Toast 时没有焦点的, 而且 Toast 显示时间有限, 过一定时间就会自动消失. Toast 类定义在 android.widget 包中, 常用方法如下:

方法 功能说明
Toast(Context context) 构造函数
setDuration(int duration) 设置提示信息显示的时长, 可以设置两种值: Toast.LENGTH_LONG 和 Toast.LENGTH_SHORT
setText(CharSequence s) 设置显示的文本
cancel() 关闭提示信息, 即不显示
makeText(Context context, CharSequence text, int duration) 该方法是静态方法, 用于直接创建一个带文本的提示信息, 并指明时长
show() 显示提示信息

创建 Toast 的步骤如下:

1, 调用 Toast 的静态方法 makeText() 创建一个指定文本和时长的提示信息

2, 调用 Toast 的 show() 方法显示提示信息

演示 Toast 的创建和显示

package com.example.toastactivity;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class ToastActivity extends Activity {    private Button b1, b2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_toast);        b1 = (Button)findViewById(R.id.button01);        b2 = (Button)findViewById(R.id.button02);        b1.setOnClickListener(new OnClickListener() {                   @Override            public void onClick(View arg0) {                Toast t1 = Toast.makeText(getApplicationContext(),                                           "我多显示一会儿", Toast.LENGTH_LONG);                t1.show();              }        });        b2.setOnClickListener(new OnClickListener() {                       @Override            public void onClick(View arg0) {                Toast t2 = Toast.makeText(getApplicationContext(),                                           "我少显示一会儿", Toast.LENGTH_SHORT);                t2.show();              }        });     }}

菜单

Android 菜单分为两种类型

  • 选项菜单
  • 上下文菜单

选项菜单

一般通过手机上的 Menu 键来显示菜单

创建选项菜单的步骤

1, 覆盖 Activity 的 onCreateOptionsMenu( ) 方法, 当第一次打开菜单时该方法被自动调用

2, 调用 Menu 的 add( ) 方法添加菜单项(MenuItem)

3, 当菜单项被选择时, 覆盖 Activity 的 onOptionsItemSelected( ) 方法来响应事件

演示选项菜单的使用

OptionMenuActivity.java

package com.example.optionmenuactivity;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class OptionMenuActivity extends Activity {    private final static int ITEM = Menu.FIRST;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_option_menu);    }    // 重写 onCreateOptionsMenu() 方法添加选项菜单    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // 添加菜单项        menu.add(0, ITEM, 0, "开始");        menu.add(0, ITEM + 1, 0, "退出");        return true;    }    // 重写 onOptionsItemSelected() 方法, 响应选项菜单被单击事件    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case ITEM:            // 设置 Activity 标题            setTitle("开始游戏");            break;        case ITEM + 1:            // 设置 Activity 标题            setTitle("退出游戏");            break;        }        return true;    }}

上下文菜单

ContextMenu 上下文菜单是 android.view.Menu 的子类, 提供了用于创建和添加菜单的接口, 其常用方法如下:

方法 功能描述
setHeaderIcon(int iconRes) 设置上下文菜单的图标
setHeaderIcon(Drawable icon) 设置上下文菜单的图标
setHeaderTitle(CharSequence title) 设置上下文菜单的标题
setHeaderTitle(int titleRes) 设置上下文菜单的标题
add(int groupId, int itemId, int order, CharSequence title) 添加子菜单

创建上下文菜单的步骤:

  1. 重写 Activity 的 onCreateContextMenu( ) 方法, 调用 Menu 的 add( ) 方法添加菜单项(MenuItem)
  2. 重写 onCreateItemSelected( ) 方法, 响应菜单单击事件
  3. 在 Activity 的 onCreate( ) 方法中, 调用 registerForContextMenu( ) 方法, 为视图注册上下文菜单

演示上下文菜单的使用

ContextMenuActivity.java

package com.example.contextmenuactivity;import org.w3c.dom.Text;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;public class ContextMenuActivity extends Activity {    // 菜单 ID 常量    private static final int ITEM0 = Menu.FIRST;    private static final int ITEM1 = Menu.FIRST + 1;    private static final int ITEM2 = Menu.FIRST + 2;    private static final int ITEM3 = Menu.FIRST + 3;    private static final int ITEM4 = Menu.FIRST + 4;    // 声明文本视图    private TextView myTV;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 根据 ID 获取文本视图        myTV = (TextView) findViewById(R.id.TextView01);        // 在文本视图上注册上下文菜单        registerForContextMenu(myTV);    }    // 重写 onCreateOptionsMenu() 方法添加选项菜单    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // 添加菜单项        menu.add(0, ITEM0, 0, "开始");        menu.add(0, ITEM1, 0, "退出");        return true;    }    // 重写 onOptionsItemSelected() 方法, 响应选项菜单被单击事件    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case ITEM0:            // 设置 Activity 标题            setTitle("开始游戏");            break;        case ITEM1:            // 设置 Activity 标题            setTitle("退出游戏");            break;        }        return true;    }    // 重写 onCreateContextMenu() 方法添加上下文菜单    public void onCreateContextMenu(ContextMenu menu, View v,            ContextMenuInfo menuInfo) {        // 添加菜单项        menu.add(0, ITEM2, 0, "红色背景");        menu.add(0, ITEM3, 0, "黄色背景");        menu.add(0, ITEM4, 0, "蓝色背景");    }    // 重写 onCreateItemSelected() 方法, 响应上下文菜单被单击事件    @Override    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()) {        case ITEM2:            // 设置文本视图的背景颜色            myTV.setBackgroundColor(Color.RED);            break;        case ITEM3:            // 设置文本视图的背景颜色            myTV.setBackgroundColor(Color.YELLOW);            break;        case ITEM4:            // 设置文本视图的背景颜色            myTV.setBackgroundColor(Color.BLUE);            break;        }        return true;    }}

练习

1, 不属于 Android 用户界面元素的是 资源引用

2, 监听器不是通过 new 运算符创建的, 而是由用户操作触发的

3, Spinner 是 下拉列表 组件

4, 简述创建选项菜单和上下文菜单的步骤

选项菜单创建步骤

  1. 覆盖 Activity 的 onCreateOptionsMenu( ) 方法, 当第一次打开菜单时该方法被自动调用
  2. 调用 Menu 的 add( ) 方法添加菜单项(MenuItem)
  3. 当菜单项被选择时, 覆盖 Activity 的 onOptionsItemSelected( ) 方法来响应事件

上下文菜单创建步骤

  1. 重写 Activity 的 onCreateContextMenu( ) 方法, 调用 Menu 的 add( ) 方法添加菜单项(MenuItem)
  2. 重写 onCreateItemSelected( ) 方法, 响应菜单单击事件
  3. 在 Activity 的 onCreate( ) 方法中, 调用 registerForContextMenu( ) 方法, 为视图注册上下文菜单

Intent 启动

Android 应用程序的三个核心组件:

活动(Activity)

广播接收器(Broadcast Receiver)

服务(Service)

都可以通过 Intent 来启动或激活, Intent 启动不同组件的方法如下

核心组件 调用方法 作用
Activity Context.startActivity( ) 和 Activity.startActivityForRestult( ) 启动一个 Activity 或使一个已经存在的 Activity 去做新的工作
Services Context.startService( ) 和 Context.bindService( ) 初始化一个 Service 或传递一个新的操作给当前正在运行的 Service 绑定一个已经存在的Service
Broadcast Receiver Context.sendBroadcast( ) Context.sendOrderedBroadcast() Context.sendStickyBroadcast( ) 对所有想接受消息的 Broadcast Receiver 传递消息

多 Activity 的 Android 应用程序可通过 startActivity( ) 方法指定相应的 Intent 对象来启动另外一个 Activity

通过 Intent 实现多 Activity 的 Android 应用的启动

首先创建两个 xml 页面

Activity01.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="第一个Activity" />        <RadioGroup        android:id="@+id/RG_OS"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical"        android:text="选择操作系统类型" >                <RadioButton            android:id="@+id/RG_OS_RB1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="安卓" />                <RadioButton            android:id="@+id/RG_OS_RB2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="塞班" />                <RadioButton            android:id="@+id/RG_OS_RB3"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="其他" />        <Button            android:id="@+id/button_submit"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="提交" />    RadioGroup>LinearLayout>

Activity02.xml

<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="第二个 Avtivity" />    <Button        android:id="@+id/button_back"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="返回" />LinearLayout>

然后创建两个 Activity

Activity01.java

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RadioButton;import android.widget.RadioGroup;public class Activity01 extends Activity{    @Override    public void onCreate(Bundle savedInstanceState)    {        RadioGroup RG_OS;        RadioButton RG_OS_RB1, RG_OS_RB2, RG_OS_RB3;        Button button_submit, button_back;        super.onCreate(savedInstanceState);        //根据布局文件activity1.xml生成界面        setContentView(R.layout.activity_activity01);        //根据XML定义生成取得 RadioGroup, RadioButton, Button 对象        RG_OS = (RadioGroup)findViewById(R.id.RG_OS);        RG_OS_RB1 = (RadioButton)findViewById(R.id.RG_OS_RB1);        RG_OS_RB2 = (RadioButton)findViewById(R.id.RG_OS_RB2);        RG_OS_RB3 = (RadioButton)findViewById(R.id.RG_OS_RB3);        button_submit = (Button)findViewById(R.id.button_submit);        //使用 setOnclickListener注册按钮单击事件监听器        button_submit.setOnClickListener((OnClickListener) new ButtonClickListener());    }    //定义按钮button_submit单击监听器, 当单击button_submit按钮时    //onClick方法被调用    class ButtonClickListener implements OnClickListener    {        public void onClick(View arg0)        {            //新建一个Intent对象            Intent myintent = new Intent();            //指定Intent对象的目标组件是Activity02            myintent.setClass(Activity01.this, Activity02.class);            //利用 startActivity()启动新的Activity,即Activity02            Activity01.this.startActivity(myintent);            //关闭当前的Activity            Activity01.this.finish();        }    }}

Activity02.java

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Activity02 extends Activity{    Button button_back;    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        //根据布局文件 avtivity02.xml 生成界面        setContentView(R.layout.activity_activity02);        button_back = (Button)findViewById(R.id.button_back);        button_back.setOnClickListener((OnClickListener)         new ButtonClickListener());    }    class ButtonClickListener implements OnClickListener    {        public void onClick(View arg0)        {            //新建一个Intent对象, 并指定启动应用程序Activity01            Intent myintent = new Intent();            myintent.setClass(Activity02.this, Activity01.class);            Activity02.this.startActivity(myintent);            Activity02.this.finish();        }    }}

最后要在 AndroidMainifest.xml 中添加 Activity02

<activity android:name="com.dh.Activity02"          android:label="@string/app_name"/>

Android 重点知识回顾_第2张图片

练习

1, Intent 的 Action 属性中, 用来标识应用程序入口的是 ACTION_MAIN

2, Android 系统提供了终端用户用于开发应用程序交互功能的组件, 这些组件包括

  • 广播接收器
  • 意图
  • 适配器
  • 内容提供器

3, Context.startActivity( ) 用于启动 Activity

4, Intent 由以下各个组成部分:

  • component (组件):目的组件
  • action(动作):用来表现意图的行动
  • category(类别):用来表现动作的类别
  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息
  • Flags(标志位):期望这个意图的运行模式

SQLite 数据库

SQLite 简介

Android 使用 SQLite 作为存储数据库, SQLite 数据库是一种免费开源的且底层无关的数据库. 是基于 C 语言设计开发的开源数据库, 最大支持 2048G 数据, 具有如下特征:

  1. 轻量级
  2. 独立性
  3. 便于管理维护
  4. 可移植性
  5. 语言无关
  6. 事务性

练习

1, 适合结构化数据存储的是 SQLite

2, Android 的四种数据存储机制为

1. Share Preferences

存储key-value paries格式的数据, 轻量级的存储机制, 类似于保存配置文件

2. Files

通过 FileInputStreamFileOutputStream 对文件进行操作。基于linux的安卓,文件属于应用私有,所以不能共享

3. Network

访问网络存储数据

4. SQlite

一个轻量级数据库,支持SQL语句

更多相关文章

  1. 转:[Android]实现静默安装APK的两种方法
  2. [Android]去除程序中广告的好方法:告诉广告没有网络连接
  3. Android菜单操作之创建并响应菜单
  4. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedA
  5. Android - 常见错误的解决方法
  6. Android 应用初始化及窗体事件的分发
  7. Android入门教程 AsyncTask的使用及execute和executeOnExecutor
  8. android菜单详解六:快捷键和菜单intent

随机推荐

  1. Android的dex热修复的实现基本原理
  2. Android中内存泄露的原因分析:
  3. 《Android(安卓)Studio开发实战 从零基础
  4. eclipse android 迁移到android studio3.
  5. [Android][Android(安卓)Studio] Gradle
  6. android多渠道打包方案总结及APK signatu
  7. Android(安卓)单元测试实战(2)—— 基于Pow
  8. Android事件分发机制及其拓展
  9. 包建强的培训课程(15):Android(安卓)App热修
  10. Android动画浅析