日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android Service的思考(1)

發布時間:2025/7/14 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Service的思考(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Android框架中,Service是比較難以理解的一部分,傻蛋查閱了相關資料和經過一系列的代碼測試,準備寫一個系列文章,嘗試著把Service由淺入深的梳理一遍,幫助大家更快的掌握Android Service。

首先我們先來看看怎么使用Service,然后再談Android Service的內部機制。

在Android中Service的啟動方式有兩種,今天先發第一種。

?

Service的啟動方式一:

啟動:Context.startService(new Intent(context,xxx.class));

停止:Context.stopService() ;

我畫了一個Service啟動的流程圖,相信大家一看就懂。Activity通過Intent啟動Service,如果Service還沒有運行,則android先調用onCreate()然后調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用多次。 調用stopService就會觸發Service的onDestroy()方法。 圖片點擊放大~

?

?

?

傻蛋做了一個示例程序是一個音樂播放器,界面如下,功能很簡單:播放、暫停、停止音樂、關閉Activity(這時Service仍然運行,繼續播放音樂)、退出程序(停止音樂退出Activity)。

?

由于要控制Service的動作,傻蛋寫了一個播放的通用類,這樣以后還能用上,代碼如下:

?

?[Copy to clipboard]Download?zuiniuwang.java
  • /** ?
  • ?*?MyMediaController.java ?
  • ?*?com.androidtest.service.mediaplayer ?
  • ?* ?
  • ?*?Function:?TODO ?
  • ?* ?
  • ?*???ver?????date???????????author ?
  • ?*?────────────────────────────────── ?
  • ?*???????????2011-5-16??????Leon ?
  • ?* ?
  • ?*?Copyright?(c)?2011,?TNT?All?Rights?Reserved. ?
  • ?*/ ?
  • ? ?
  • package?com.androidtest.service.mediaplayer; ?
  • ? ?
  • import?java.io.Serializable; ?
  • ? ?
  • import?android.media.MediaPlayer; ?
  • ? ?
  • /** ?
  • ?*?ClassName:MyMediaController ?
  • ?*?Function:?Mediaplayer?的一個控制類,控制播放器的播放?暫停?停止?等動作 ?
  • ?*?REASON ?
  • ?* ?
  • ?*?@author?Leon ?
  • ?*?@version ?
  • ?*?@since?Ver?1.1 ?
  • ?*?@Date?2011-5-16 ?
  • ?*/ ?
  • public?enum?MyMediaController?implements?Serializable?{ ?
  • ????play?{ ?
  • ????????@Override ?
  • ????????public?void?execute()?{ ?
  • ????????????if?(mediaPlayer?!=?null?&&?!mediaPlayer.isPlaying()) ?
  • ????????????????mediaPlayer.start(); ?
  • ????????????//?TODO?Auto-generated?method?stub ?
  • ????????} ?
  • ? ?
  • ????}, ?
  • ????pause?{ ?
  • ? ?
  • ????????@Override ?
  • ????????public?void?execute()?{ ?
  • ? ?
  • ????????????//?TODO?Auto-generated?method?stub ?
  • ????????????if?(mediaPlayer?!=?null?&&?mediaPlayer.isPlaying())?{ ?
  • ????????????????mediaPlayer.pause(); ?
  • ????????????} ?
  • ????????} ?
  • ? ?
  • ????}, ?
  • ????stop?{ ?
  • ????????@Override ?
  • ????????public?void?execute()?{ ?
  • ????????????//?TODO?Auto-generated?method?stub ?
  • ????????????if?(mediaPlayer?!=?null)?{ ?
  • ????????????????mediaPlayer.stop(); ?
  • ????????????????try?{ ?
  • ????????????????????//?在stop后如果要重新Start需要prepare一下 ?
  • ????????????????????mediaPlayer.prepare(); ?
  • ????????????????????//?從頭播放 ?
  • ????????????????????mediaPlayer.seekTo(0); ?
  • ? ?
  • ????????????????}?catch?(Exception?e)?{ ?
  • ? ?
  • ????????????????????//?TODO?Auto-generated?catch?block ?
  • ????????????????????e.printStackTrace(); ?
  • ? ?
  • ????????????????} ?
  • ????????????} ?
  • ????????} ?
  • ? ?
  • ????}; ?
  • ????public?static?MediaPlayer?mediaPlayer; ?
  • ? ?
  • ????public?abstract?void?execute(); ?
  • }?
  • 然后是控制播放的Activity

    ?[Copy to clipboard]Download?zuiniuwang.java
  • /** ?
  • ?*?MusicPlayer.java ?
  • ?*?com.androidtest.activity ?
  • ?* ?
  • ?*?Function:?TODO ?
  • ?* ?
  • ?*???ver?????date???????????author ?
  • ?*?────────────────────────────────── ?
  • ?*???????????2011-5-15??????Leon ?
  • ?* ?
  • ?*?Copyright?(c)?2011,?TNT?All?Rights?Reserved. ?
  • ?*/ ?
  • ? ?
  • package?com.androidtest.activity.musicplayer; ?
  • ? ?
  • import?android.app.Activity; ?
  • import?android.content.Intent; ?
  • import?android.os.Bundle; ?
  • import?android.util.Log; ?
  • import?android.view.View; ?
  • import?android.view.View.OnClickListener; ?
  • import?android.widget.Button; ?
  • ? ?
  • import?com.androidtest.MyImageButton; ?
  • import?com.androidtest.R; ?
  • import?com.androidtest.service.mediaplayer.MyMediaController; ?
  • import?com.androidtest.service.mediaplayer.NormalMusicService; ?
  • ? ?
  • /** ?
  • ?*?ClassName:MusicPlayer?Function:?TODO?ADD?FUNCTION?Reason:?TODO?ADD?REASON ?
  • ?* ?
  • ?*?@author?Leon ?
  • ?*?@version ?
  • ?*?@since?Ver?1.1 ?
  • ?*?@Date?2011-5-15 ?
  • ?*/ ?
  • public?class?NormalMusicPlayerActivity?extends?Activity?implements?OnClickListener?{ ?
  • ????private?static?final?String?TAG?=?NormalMusicPlayerActivity.class.getSimpleName(); ?
  • ????private?Intent?intent?; ?
  • ????@Override ?
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????super.onCreate(savedInstanceState); ?
  • ????????this.setContentView(R.layout.music_player_layout); ?
  • ????????Button?playButton?=?(Button)?this.findViewById(R.id.play); ?
  • ????????playButton.setOnClickListener(this); ?
  • ????????Button?pauseButton?=(Button)?this.findViewById(R.id.pause); ?
  • ????????pauseButton.setOnClickListener(this); ?
  • ????????Button?stopButton?=(Button)this.findViewById(R.id.stop); ?
  • ????????stopButton.setOnClickListener(this); ?
  • ????????Button?closeActivityButton?=(Button)this.findViewById(R.id.close); ?
  • ????????closeActivityButton.setOnClickListener(this); ?
  • ????????Button?exitActivityButton?=(Button)this.findViewById(R.id.exit); ?
  • ????????exitActivityButton.setOnClickListener(this); ?
  • ? ?
  • ????????intent?=?new?Intent("com.androidtest.service.mediaplayer.NormalMusicService"); ?
  • ????} ?
  • ? ?
  • ????private?void?playAction(MyMediaController?playType)?{ ?
  • ? ?
  • ????????Bundle?bundle?=?new?Bundle(); ?
  • ????????bundle.putSerializable(NormalMusicService.INTENT_KEY,?playType); ?
  • ????????intent.putExtras(bundle); ?
  • ????????NormalMusicPlayerActivity.this.startService(intent); ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?onClick(View?view)?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????switch?(view.getId())?{ ?
  • ????????case?R.id.play: ?
  • ????????????Log.d(TAG,?"play......."); ?
  • ????????????playAction(MyMediaController.play); ?
  • ????????????break; ?
  • ????????case?R.id.pause: ?
  • ????????????Log.d(TAG,?"pause......."); ?
  • ????????????playAction(MyMediaController.pause); ?
  • ????????????break; ?
  • ????????case?R.id.stop: ?
  • ????????????Log.d(TAG,?"stop......."); ?
  • ????????????playAction(MyMediaController.stop); ?
  • ????????????break; ?
  • ????????case?R.id.close: ?
  • ????????????Log.d(TAG,?"close......."); ?
  • ????????????this.finish(); ?
  • ????????????break; ?
  • ????????case?R.id.exit: ?
  • ????????????Log.d(TAG,?"exit......."); ?
  • ????????????stopService(intent); ?
  • ????????????this.finish(); ?
  • ? ?
  • ????????} ?
  • ? ?
  • ????} ?
  • ? ?
  • }?
  • 最后是Service類

    ?[Copy to clipboard]Download?zuiniuwang.java
  • /** ?
  • ?*?MusicService.java ?
  • ?*?com.androidtest.service ?
  • ?* ?
  • ?*?Function:?TODO ?
  • ?* ?
  • ?*???ver?????date???????????author ?
  • ?*?────────────────────────────────── ?
  • ?*???????????2011-5-15??????Leon ?
  • ?* ?
  • ?*?Copyright?(c)?2011,?TNT?All?Rights?Reserved. ?
  • */ ?
  • ? ?
  • package?com.androidtest.service.mediaplayer; ?
  • import?java.io.Serializable; ?
  • ? ?
  • import?android.app.Service; ?
  • import?android.content.Intent; ?
  • import?android.media.MediaPlayer; ?
  • import?android.os.IBinder; ?
  • import?android.util.Log; ?
  • ? ?
  • import?com.androidtest.R; ?
  • ? ?
  • /** ?
  • ?*?ClassName:MusicService ?
  • ?*?Function:?TODO?ADD?FUNCTION ?
  • ?*?Reason:???TODO?ADD?REASON ?
  • ?* ?
  • ?*?@author???Leon ?
  • ?*?@version ?
  • ?*?@since????Ver?1.1 ?
  • ?*?@Date?????2011-5-15 ?
  • ?*/ ?
  • public?class?NormalMusicService?extends?Service{ ?
  • ? ?
  • ????private??String??TAG?=?NormalMusicService.class.getSimpleName(); ?
  • ????private??MediaPlayer?myMediaPlayer?; ?
  • ????public???static?final??String?INTENT_KEY=?"action"?; ?
  • ????@Override ?
  • ????public?IBinder?onBind(Intent?arg0)?{? ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????return?null; ?
  • ? ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?onCreate()?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????Log.v(TAG?,?TAG+?"?onCreate()"); ?
  • ????????super.onCreate(); ?
  • ????????if(myMediaPlayer==null){ ?
  • ????????????myMediaPlayer=MediaPlayer.create(this,?R.raw.test)?; ?
  • ????????????myMediaPlayer.setLooping(false); ?
  • ????????} ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?onStart(Intent?intent,?int?startId)?{ ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????Log.v(TAG?,?TAG?+?"?onStart()"); ?
  • ????????super.onStart(intent,?startId); ?
  • ????????if(intent!=null){ ?
  • ????????????MyMediaController?mediaControl?=(MyMediaController)intent.getSerializableExtra(NormalMusicService.INTENT_KEY); ?
  • ????????????mediaControl.mediaPlayer=myMediaPlayer; ?
  • ????????????mediaControl.execute(); ?
  • ????????} ?
  • ????} ?
  • ? ?
  • ????@Override ?
  • ????public?void?onDestroy()?{ ?
  • ? ?
  • ????????//?TODO?Auto-generated?method?stub ?
  • ????????super.onDestroy(); ?
  • ????????Log.v(TAG?,?"?onDestroy"); ?
  • ????????if(myMediaPlayer!=null){ ?
  • ????????????myMediaPlayer.stop(); ?
  • ????????????myMediaPlayer.release(); ?
  • ????????} ?
  • ? ?
  • ????} ?
  • ? ?
  • }?
  • ?


    本文轉自 最牛傻蛋 51CTO博客,原文鏈接:http://blog.51cto.com/zuiniuwang/718320,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的Android Service的思考(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。