Android基礎知識之四大元件Activity(五)Activity生命週期場景的應用
今天,來寫一個關於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狀態的方法在什麼時候被呼叫,從而去設計應用。
相關推薦
Android基礎知識之四大元件Activity(五)Activity生命週期場景的應用
今天,來寫一個關於Android四大元件Activity生命週期的一個簡單應用,做一個關於極簡單的音樂播放器(只是為了鞏固一下Activity的生命週期,並不能當作專案來用)。 先來截個介面的圖: 很簡單吧,只有三個按鈕,播放一首歌,但來研究Activity的生命週期,這
android-基礎知識整理--四大元件(未完)
四大元件: activity : 什麼是activity? Android程式與使用者互動的視窗 - 使用方式 生命週期 onCreat() onStart() on setContentView() ,//
Linux 基礎知識 之CIFS檔案系統 (samba)
一、簡介 1.CIFS: CIFS 是一個新提出的協議,它使程式可以訪問遠端Internet計算機上的檔案並要求此計算機提供服務。CIFS 使用客戶/伺服器模式。客戶程式請求遠在伺服器上的伺服器程式為它提供服務。伺服器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Micro
android6.0 Activity(五) Activity的測量(Measure)、佈局(Layout)和繪製(Draw)
Android應用程式視窗的繪圖表面在建立完成之後,我們就可以從上到下地繪製它裡面的各個檢視了,即各個UI元素了。不過在繪製這些UI元素之前,我們還需要從上到下地測量它們實際所需要的大小,以及對它們的位置進行合適的安排,即對它們進行合適的佈局。在本文中,我們就將詳細
自學Android之UI元件:(二)Fragment的基本使用(上)
本篇為UI元件的第二篇,主要探討關於Fragment的基本使用,包括簡單的原理以及建立、修改、刪除等操作。 在本篇文章中,你將瞭解到: 1.什麼是Fragment。 2.Fragmen
Linux 基礎知識 之 ISCSI 檔案系統 (磁碟共享)
一、iSCSI簡介 iscsi是一種塊級別的協議,用於通過TCP/IP網路共享原始儲存裝置,即硬碟的共享。可以用已經存在的IP和乙太網如網絡卡、交換機、路由器等通過iSCSI協議共享和訪問儲存。 iSCSI target是一種由遠端iSCSI伺服器(target)提供的遠端硬碟。 二、磁
css基礎知識的復習總結(二)
文本 pin zoom clear head 導航 設置 mage 之間 文檔流、浮動、清除浮動、overflow、定位 1.文檔流 css文檔流,標準流是什麽? 元素自上而下,自左而右,塊元素獨占一行,行內元素在一行上顯示,碰到父集元素的邊框換行。
css基礎知識的復習總結(三)
網頁 元素 ati 塊元素 isp 方式 一半 浮動 .cn 1.定位的盒子居中顯示 案例一:(定位的盒子居中顯示) 預期效果 實現步驟: 設置父盒子為相對定位 設置子盒子left值為父盒子寬度一半設置子盒子左邊距為自己寬度一半 總結:margin:0 auto 只能讓在
談談-Android-PickerView系列之源碼解析(二)
需求 動態 () comm tag 多個 來源 ntc 寬高 前言 WheelView想必大家或多或少都有一定了解, 它是一款3D滾輪控件,效果類似IOS 上面的UIpickerview 。按照國際慣例,先放一張效果圖: 以上是Android-PickerView
Android基礎——項目的文件結構(三)
好的 oid ext main 成對 之間 app cnblogs 高級 Android基礎——項目的文件結構(三) 代碼源文件夾與資源文件夾 【註】此項目文件結構僅限於Android Studio下的Android項目!!! 在一個Android項目中,代碼源文件夾有
基本知識之標頭檔案(一) stdlib.h && conio.h
https://wenda.so.com/q/1367031948061742 來自360問答 stdlib.h stdlib 標頭檔案裡包含了C語言的一些函式 該檔案包含了的C語言標準庫函式的定義 stdlib.h裡面定義了五種型別、一些巨集和通用工具函式。型別例如si
PHP基礎回顧之cookie和session(三)
Cookie 是什麼? cookie 常用於***識別使用者***。cookie 是一種伺服器***留在使用者計算機上的小檔案***。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能夠建立並取回 cookie 的值。
JavaFX UI控制元件教程(五)之Radio Button
本章討論單選按鈕控制元件和RadioButton類,該類的一個專門實現ToggleButton。 可以選擇或取消選擇單選按鈕控制元件。通常,單選按鈕組合成一個組,其中一次只能選擇一個按鈕。此行為將它們與切換按鈕區分開來,因為組中的所有切換按鈕都可以處於取消選擇狀態。
《Android 開發藝術探索》讀書筆記(一)——Activity 的生命週期和啟動模式
Activity 作為 Android 四大元件之首,它作為和使用者互動的介面,在開發中使用得可謂極其頻繁,所以弄清楚 Activity 的生命週期和啟動方式是非常重要的,要牢記。 1 Activity 的生命週期全面分析 1.1 典型情況下的生命週期分析 onCrea
#C語言基礎知識歸納和例題分析(1)
## C語言基礎知識歸納和例題分析(1) 計算機程式和計算機語言 1.程式 就是一組計算機能識別和執行的指令 2.計算機語言經歷的幾個階段 機器語言(直接執行)→符號語言(又稱組合語言)→高階語言 3.高階語
java基礎學習之——子類重寫(覆蓋)父類的方法必須滿足的條件
子類重寫(覆蓋)父類的方法必須滿足的條件:父類中的方法在子類中必須可見,即子類繼承了父類中的該方法(可以顯式的使用super關鍵字來訪問父類中的被重寫的方法),如果父類中的方法為private型別的,那麼子類則無法繼承,也無法覆蓋。子類和父類的方法必須是例項方法,如果父類是
關於學習NDK基礎知識這些就夠了(二)
一、指標的運算 指標的型別: 指標有型別,地址沒有型別 地址只是開始的位置,型別讀取到什麼位置結束 1、常量指標: 首先它是一個指標,常量只是用來修飾指標的定語。其定義如下: char const * cp; cha
大資料基礎知識學習-----Hive學習筆記(二)Hive安裝環境準備
Hive安裝環境準備 Hive安裝地址 Hive安裝部署 Hive安裝及配置 把apache-hive-1.2.1-bin.tar.gz上傳到linux的/opt/software目錄下 解壓apache-hive-1.2.
Android進階之自定義View(1)實現可換行的TextView
今天來一起學習一下最簡單的自定義view,自己動手寫一個MyTextView,當然不會像系統的TextView那麼複雜,只是實現一下TextView的簡單功能,包括分行顯示及自定義屬性的處理,主要目的是介紹自定義view的實現的基本思路和需要掌握的一些基礎知
Android JNI開發之NDK環境配置(eclipse)
最近開發一個小專案,需要用到native方法,於是需要配置NDK環境。首先肯定是網上找,網上比較多,但是都不全,有的已經過時了。所以,我綜合大家之長,寫了如下配置流程,供大家使用,有什麼不對的請大家指正。 總共分為5步: 1、下載NDK。這個我不說了。