Android 重点知识回顾

安卓复习

基础知识

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


<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


<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语句

你可能感兴趣的:(Android)