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
- Android基础知识之四大组件Activity(五)Activity生命周期场景的应用
- Android基础知识之四大组件Activity(二)一个Activity的生命周期?
- Android四大组件之Activity的生命周期
- Android四大组件之Activity(生命周期)
- Android四大组件之Activity,Activity生命周期
- Android基础知识之四大组件Activity(三)多个Activity交互的生命周期与设计思想
- Android基础知识之四大组件Activity(一)什么是Activity?
- Android 四大组件学习之Activity生命周期
- Android 四大组件之Activity生命周期
- Android 四大组件之 Activity(1)--生命周期
- Android 四大组件之 Activity生命周期
- Android四大组件之---activity生命周期详解
- Android四大组件之Activity(七大生命周期)
- Android四大组件之Activity生命周期分析
- Android 四大组件Activity之生命周期
- Android四大组件之Activity篇(二)(Activity的生命周期)
- Android的四大组件之-Activity的状态和生命周期
- Android四大组件---Activity之启动模式及启动模式的应用场景
- Web Service修炼之一XFire入门
- 在ubuntu下如何搜索文件?
- 15/8/2网络连接/C-S连接
- java 类加载机制
- 内存模型和名称空间
- Android基础知识之四大组件Activity(五)Activity生命周期场景的应用
- 【leetcode】 database Rising Temperature
- UVA 210
- webservice http soap
- HDOJ 1241 Oil Deposits(dfs)
- mysql-5.6.20-winx64安装及常见问题处理
- android 源码下载中遇到的问题 repo sync
- RFC
- 周报