Android基础知识之四大组件Activity(五)Activity生命周期场景的应用

来源:互联网 发布:2017房地产数据分析 编辑:程序博客网 时间:2024/05/22 13:00

今天,来写一个关于Android四大组件Activity生命周期的一个简单应用,做一个关于极简单的音乐播放器(只是为了巩固一下Activity的生命周期,并不能当作项目来用)。

先来截个界面的图:

很简单吧,只有三个按钮,播放一首歌,但来研究Activity的生命周期,这就足够了。

好了,我们先来new 一个Project,将三个图片资源拷贝到drawable文件夹里,在创建一个文件夹命名为“raw”,将音乐文件拷贝进去。


在布局文件中这样写:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"    android:orientation="horizontal">    <ImageButton        android:src="@drawable/start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/ibtnStart" />    <ImageButton        android:src="@drawable/pause"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/ibtnPause" />    <ImageButton        android:src="@drawable/stop"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/ibtnStop" /></LinearLayout>

MainActivity方法中的Java代码:


package com.daxiangzai.androiddemo.applicationofactivitylifecycle;import android.media.MediaPlayer;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.View;import android.widget.ImageButton;public class MainActivity extends ActionBarActivity implements View.OnClickListener {    private MediaPlayer mp;    private ImageButton start, pause, stop;    private int position;   //用来存放播放位置    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //调用方法获得按钮并设置监听        init();        //调用方法设置按钮状态为未播放状态        initStop();        //此方法用来判断之前Activity意外被销毁,若被销毁(即Bundle值不为空),获得播放位置        if (savedInstanceState != null) {            //取出上次播放的位置            position = savedInstanceState.getInt("position");            //调用方法获得播放文件            createMediaPlayer();            /*                Time:2015-8-3                Reason: Here is repeated use, MediaPlayer.start in onResume method.                Authod: daxiangzai             */            /*            //调至上次播放位置            mp.seekTo(position);            //开始播放            mp.start();*/            //设置按钮状态为播放状态            initplay();        }    }    //获得播放文件    private void createMediaPlayer() {        mp = MediaPlayer.create(MainActivity.this, R.raw.mysoul);    }    //设置按钮状态为播放状态    private void initplay() {        start.setEnabled(false);        pause.setEnabled(true);        stop.setEnabled(true);    }    //设置按钮状态为未播放状态    private void initStop() {        start.setEnabled(true);        pause.setEnabled(false);        stop.setEnabled(false);    }    //调用方法获得按钮并设置监听    private void init() {        //查找到按钮        start = (ImageButton) findViewById(R.id.ibtnStart);        pause = (ImageButton) findViewById(R.id.ibtnPause);        stop = (ImageButton) findViewById(R.id.ibtnStop);        //设置监听        start.setOnClickListener(this);        pause.setOnClickListener(this);        stop.setOnClickListener(this);    }    //各个按钮的监听事件    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.ibtnStart:                //调用方法获得播放文件                createMediaPlayer();                //音乐播放                mp.start();                //设置按钮状态为播放状态                initplay();                break;            case R.id.ibtnPause:                //判断是否正在播放,如果是,暂停播放,否则开始播放                if (mp.isPlaying()) {                    mp.pause();                } else {                    mp.start();                }                break;            case R.id.ibtnStop:                //停止播放                mp.stop();                //设置按钮状态为未播放状态                initStop();                break;        }    }    //此方法在当前Activity非活动Activity的时候会调用    @Override    protected void onPause() {        super.onPause();        //暂停播放        mp.pause();        //获取播放位置        position = mp.getCurrentPosition();    }    //此方法再重新启动Activity时调用    @Override    protected void onResume() {        super.onResume();        //若播放位置不是0,则继续播放        if (position != 0) {            mp.seekTo(position);            mp.start();        }    }    //调用onDestroy方法销毁Activity,并释放音乐播放内存    @Override    protected void onDestroy() {        super.onDestroy();        //若播放过释放音乐播放内存        if (mp != null) {            mp.reset();            mp = null;        }    }    //此方法在意外杀死Activity时调用,用来保存播放位置    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        //暂停播放        mp.pause();        //获取当前播放位置        position = mp.getCurrentPosition();        //储存到Bundle对象里        outState.putInt("position", position);    }}


方法的用途,在上面注释中写的很清楚了。

在切换到别的Activity时(例如:来电话了),此程序的Activity会执行onPause()方法暂停掉音乐。从而使得此应用与其他的Activity之间互不影响,当恢复此Activity时,音乐会继续上次的播放。

当Activity被意外销毁的时候(利用横竖屏切换模仿),当再次回复Activity时会接着上次的播放位置自动播放。


在这个应用中,我们应该熟悉Activity的生命周期方法与保存Activity状态的方法在什么时候被调用,从而去设计应用。


资源文件与代码:http://download.csdn.net/detail/lxawcf/8957321

0 0
原创粉丝点击