上一篇博文将前面所介绍的listView和线程结合写了个简单的下载歌曲项目。今天开始我将为大家介绍安卓四大组件。首先来说说Activity

1:Activity创建

Activity是安卓最基本的东西,说白了就是界面代码。所以掌握Activity的用法很重要。Activity的创建不是自己去写个类然后继承Acvity,而是要通过流程去创建,这样的话系统会在清单文件和res文件帮你配置好设置,如果不这样创建会引起不必要的麻烦,具体创建方法如下

右键选择你的项目--》new--》other-》选择Android Activity-》点击next->修改Activity name后点击next-》这个界面就能让你看到系统自动帮你配置的文件,然后点击finish就可以了

2:Activity的生命周期

大家先看下下面这张图

211206198.png

当我们开启一个app时系统就自动调用onCreate方法-->onStart()-->onResume(),调用完后我们就看到了界面,接着如果我们触发一些动作(例如模拟器上的锁屏键)可以触发onPasuse().当解锁以后会调用onResume方法,当我们我们触发一些动作时(例如玩游戏突然来电,或者模拟器HOME键)系统就会调用onStop()方法。应用如果开的太多且都在onStop状态时系统会根据优先级来判断是否销毁这个应用

(大家是不是曾经莫名其妙的丢失数据,其实就是这个原因)。最后我们点击模拟器Back键就会触发onDestroy()方法然户shutDown。这个图非常重要,最好能深刻记在大脑中建议多看几遍

3:生命周期的作用

相信大家也看到了,当我们需要面对应急事件(例如开了程序突然来电话,程序数据没保存怎么办)。就可以在重写这些方法来处理应急事件。这里我给大家写个小例子,一个文本框,里面随便填写数据,然后按下模拟器的home键或者退格键(模拟电话来了等突发时)我们就可以在onStop()方法中讲数据写入sdCard当中,代码如下(这里的/mmt/sdcard指的是sdcard路径,更准确的应该是Environment.getExternalStorageDirectory()这里这样写只为说明一般情况下也可以这样写sdCard路径.这里流的知识属于javaSE我就不多说了)

@Override
protected void onStop() {
    super.onStop();
    try {
        //使用字节流将数据写入sdCard
        fr = new FileWriter("/mnt/sdcard/xxx.txt");
        mbw = new BufferedWriter(fr);
        mbw.write(met.getText().toString());
        mbw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            if(mbw!=null&&fr!=null){
                mbw.close();
                fr.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
                                                                                                                                                                                                                                              
    }
}

然后再onstart()方法中将数据读出来,代码如下


@Override
protected void onStart() {
    super.onStart();
    try {
        //将数据从SDCard读取出来
        mbr=new BufferedReader(new FileReader("/mnt/sdcard/xxx.txt"));
        String s=null;
        String total="";
        while((s=mbr.readLine())!=null){
           total+=s;
        }
        met.setText(total);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        if(mbr!=null){
            try {
                mbr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

这样就可以做到数据存储(很多的游戏程序就是这样自动保存进度的)。大功告成,我会吧这次的完整的代码上传到我的上传,名字为标题名字,有需要的可以去下载。下次我将为大家介绍intent类以及2种常用的界面跳转方法。