软件发布| 专题库| 优优资讯| 苹果专区| 安卓专区| 软件下载| 首页
优优资讯 电脑教程 安卓教程 安卓攻略 苹果教程 苹果攻略 新闻资讯

Android开发:核心组件Service解析

时间:2016-04-26 来源:本站整理 我要评论
在日常编程开发时,大家有没有遇到与核心组件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的动作,傻蛋写了一个播放的通用类,这样在以后的课程中还能用上,代码如下:


  1. /** 
  2.  * MyMediaController.java 
  3.  * com.androidtest.service.mediaplayer 
  4.  * 
  5.  * Function: TODO  
  6.  * 
  7.  *   ver     date           author 
  8.  * ────────────────────────────────── 
  9.  *           2011-5-16      Leon 
  10.  * 
  11.  * Copyright (c) 2011, 最牛网 All Rights Reserved. 
  12.  */ 
  13.  
  14. package com.zuiniuwang; 
  15.  
  16. import java.io.Serializable; 
  17.  
  18. import android.media.MediaPlayer; 
  19.  
  20. /** 
  21.  * ClassName:MyMediaController  
  22.  * Function: Mediaplayer 的一个控制类,控制播放器的播放 暂停 停止 等动作 
  23.  * REASON 
  24.  *  
  25.  * @author Leon 
  26.  * @version 
  27.  * @since Ver 1.1 
  28.  * @Date 2011-5-16 
  29.  */ 
  30. public enum MyMediaController implements Serializable { 
  31.     play { 
  32.         @Override 
  33.         public void execute() { 
  34.             if (mediaPlayer != null && !mediaPlayer.isPlaying()) 
  35.                 mediaPlayer.start(); 
  36.             // TODO Auto-generated method stub 
  37.         } 
  38.  
  39.     }, 
  40.     pause { 
  41.  
  42.         @Override 
  43.         public void execute() { 
  44.  
  45.             // TODO Auto-generated method stub 
  46.             if (mediaPlayer != null && mediaPlayer.isPlaying()) { 
  47.                 mediaPlayer.pause(); 
  48.             } 
  49.         } 
  50.  
  51.     }, 
  52.     stop { 
  53.         @Override 
  54.         public void execute() { 
  55.             // TODO Auto-generated method stub 
  56.             if (mediaPlayer != null) { 
  57.                 mediaPlayer.stop(); 
  58.                 try { 
  59.                     // 在stop后如果要重新Start需要prepare一下 
  60.                     mediaPlayer.prepare(); 
  61.                     // 从头播放 
  62.                     mediaPlayer.seekTo(0); 
  63.  
  64.                 } catch (Exception e) { 
  65.  
  66.                     // TODO Auto-generated catch block 
  67.                     e.printStackTrace(); 
  68.  
  69.                 } 
  70.             } 
  71.         } 
  72.  
  73.     }; 
  74.     public static MediaPlayer mediaPlayer; 
  75.  
  76.  
  77.     public abstract void execute(); 

然后是控制播放的Activity:


  1. /** 
  2.  * MusicPlayer.java 
  3.  * com.androidtest.activity 
  4.  * 
  5.  * Function: TODO  
  6.  * 
  7.  *   ver     date           author 
  8.  * ────────────────────────────────── 
  9.  *           2011-5-15      Leon 
  10.  * 
  11.  * Copyright (c) 2011, 最牛网 All Rights Reserved. 
  12.  */ 
  13.  
  14. package com.androidtest.activity.musicplayer; 
  15.  
  16. import android.app.Activity; 
  17. import android.content.Intent; 
  18. import android.os.Bundle; 
  19. import android.util.Log; 
  20. import android.view.View; 
  21. import android.view.View.OnClickListener; 
  22. import android.widget.Button; 
  23.  
  24. import com.androidtest.MyImageButton; 
  25. import com.androidtest.R; 
  26. import com.androidtest.service.mediaplayer.MyMediaController; 
  27. import com.androidtest.service.mediaplayer.NormalMusicService; 
  28. import com.androidtest.sharedpreferences.TestSharePreferences; 
  29.  
  30.  
  31.  
  32.  
  33. /** 
  34.  * ClassName:MusicPlayer Function: TODO ADD FUNCTION Reason: TODO ADD REASON 
  35.  *  
  36.  * @author Leon 
  37.  * @version 
  38.  * @since Ver 1.1 
  39.  * @Date 2011-5-15 
  40.  */ 
  41. public class NormalMusicPlayerActivity extends Activity implements OnClickListener { 
  42.     private static final String TAG = NormalMusicPlayerActivity.class.getSimpleName(); 
  43.     private Intent intent ; 
  44.     @Override 
  45.     protected void onCreate(Bundle savedInstanceState) { 
  46.  
  47.         // TODO Auto-generated method stub 
  48.         super.onCreate(savedInstanceState); 
  49.         this.setContentView(R.layout.music_player_layout); 
  50.         Button playButton = (Button) this.findViewById(R.id.play); 
  51.         playButton.setOnClickListener(this); 
  52.         Button pauseButton =(Button) this.findViewById(R.id.pause); 
  53.         pauseButton.setOnClickListener(this); 
  54.         Button stopButton =(Button)this.findViewById(R.id.stop); 
  55.         stopButton.setOnClickListener(this); 
  56.         Button closeActivityButton =(Button)this.findViewById(R.id.close); 
  57.         closeActivityButton.setOnClickListener(this); 
  58.         Button exitActivityButton =(Button)this.findViewById(R.id.exit); 
  59.         exitActivityButton.setOnClickListener(this); 
  60.          
  61.         intent = new Intent("com.androidtest.service.mediaplayer.NormalMusicService"); 
  62.          
  63.         TestSharePreferences testSharePreferences=(TestSharePreferences)this.getApplication(); 
  64.         Log.v(TAG , ""+testSharePreferences.getSharedInteger()); 
  65.     } 
  66.  
  67.     private void playAction(MyMediaController playType) { 
  68.          
  69.         Bundle bundle = new Bundle(); 
  70.         bundle.putSerializable(NormalMusicService.INTENT_KEY, playType); 
  71.         intent.putExtras(bundle); 
  72.         NormalMusicPlayerActivity.this.startService(intent); 
  73.     } 
  74.  
  75.     @Override 
  76.     public void onClick(View view) { 
  77.  
  78.         // TODO Auto-generated method stub 
  79.         switch (view.getId()) { 
  80.         case R.id.play: 
  81.             Log.d(TAG, "play......."); 
  82.             playAction(MyMediaController.play); 
  83.             break
  84.         case R.id.pause: 
  85.             Log.d(TAG, "pause......."); 
  86.             playAction(MyMediaController.pause); 
  87.             break
  88.         case R.id.stop: 
  89.             Log.d(TAG, "stop......."); 
  90.             playAction(MyMediaController.stop); 
  91.             break
  92.         case R.id.close: 
  93.             Log.d(TAG, "close......."); 
  94.             this.finish(); 
  95.             break
  96.         case R.id.exit: 
  97.             Log.d(TAG, "exit......."); 
  98.             stopService(intent); 
  99.             this.finish(); 
  100.      
  101.         } 
  102.  
  103.     } 
  104.  

最后是Service类


  1. /** 
  2.  * MusicService.java 
  3.  * com.androidtest.service 
  4.  * 
  5.  * Function: TODO  
  6.  * 
  7.  *   ver     date           author 
  8.  * ────────────────────────────────── 
  9.  *           2011-5-15      Leon 
  10.  * 
  11.  * Copyright (c) 2011, 最牛网 All Rights Reserved. 
  12. */ 
  13.  
  14. package com.zuiniuwang.service; 
  15. import java.io.Serializable; 
  16.  
  17. import android.app.Service; 
  18. import android.content.Intent; 
  19. import android.media.MediaPlayer; 
  20. import android.os.IBinder; 
  21. import android.util.Log; 
  22. import com.zuiniuwang.*; 
  23.  
  24.  
  25.  
  26. /** 
  27.  * ClassName:MusicService 
  28.  * Function: TODO ADD FUNCTION 
  29.  * Reason:   TODO ADD REASON 
  30.  * 
  31.  * @author   Leon 
  32.  * @version   
  33.  * @since    Ver 1.1 
  34.  * @Date     2011-5-15 
  35.  */ 
  36. public class NormalMusicService extends Service{ 
  37.  
  38.     private  String  TAG = NormalMusicService.class.getSimpleName(); 
  39.     private  MediaPlayer myMediaPlayer ; 
  40.     public   static final  String INTENT_KEY= "action" ; 
  41.     @Override 
  42.     public IBinder onBind(Intent arg0) {  
  43.          
  44.         // TODO Auto-generated method stub 
  45.         return null
  46.          
  47.     } 
  48.  
  49.     @Override 
  50.     public void onCreate() { 
  51.          
  52.         // TODO Auto-generated method stub 
  53.         Log.v(TAG , TAG+ " onCreate()"); 
  54.         super.onCreate(); 
  55.         if(myMediaPlayer==null){ 
  56.             myMediaPlayer=MediaPlayer.create(this, R.raw.test) ;  
  57.             myMediaPlayer.setLooping(false); 
  58.         } 
  59.     } 
  60.  
  61.     @Override 
  62.     public void onStart(Intent intent, int startId) {    
  63.         // TODO Auto-generated method stub 
  64.         Log.v(TAG , TAG + " onStart()"); 
  65.         super.onStart(intent, startId); 
  66.         if(intent!=null){ 
  67.             MyMediaController mediaControl =(MyMediaController)intent.getSerializableExtra(NormalMusicService.INTENT_KEY); 
  68.             mediaControl.mediaPlayer=myMediaPlayer; 
  69.             mediaControl.execute(); 
  70.         } 
  71.     } 
  72.  
  73.      
  74.     @Override 
  75.     public void onDestroy() { 
  76.          
  77.         // TODO Auto-generated method stub 
  78.         super.onDestroy(); 
  79.         Log.v(TAG , " onDestroy"); 
  80.         if(myMediaPlayer!=null){ 
  81.             myMediaPlayer.stop(); 
  82.             myMediaPlayer.release(); 
  83.         } 
  84.          
  85.     } 
  86.      

附件为本实例的代码下载地址:http://down.51cto.com/data/326354

今天的教程文章就到这了,希望这篇XXX的教程对大家有所帮助。还需要了解相关内容的伙伴,要经常关注本站的新动态哦。除了文章外,本站还有许多安全、方便、绿色的手机软件可供免费下载,谢谢大家的支持了。【优优软件下载站】

用户评论

(已有0条评论)
表情
注:您的评论需要经过审核才能显示哦,请文明发言!
还没有评论,快来抢沙发吧!
快速检索
0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z