博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背景音乐的实现
阅读量:4587 次
发布时间:2019-06-09

本文共 5084 字,大约阅读时间需要 16 分钟。

Android Service生命周期与Activity生命周期是相似的,但是也存在一些细节上也存在着重要的不同:

1、onCreate和onStart是不同的:通过从客户端调用Context.startService(Intent)方法我们可以启动一个服务。如果这个服务还没有运行,Android将启动它并且在onCreate方法之后调用它的onStart方法。如果这个服务已经在运行,那么它的onStart方法将被新的Intent再次调用。所以对于单个运行的Service它的onStart方法被反复调用是完全可能的并且是很正常的。

2、不需要onResume、onPause以及onStop方法。

3、如果一个客户端需要持久的连接到一个服务,那么他可以调用Context.bindService方法。如果这个服务没有运行方法将通过调用onCreate方法去创建这个服务但并不调用onStart方法来启动它。相反,onBind方法将被客户端的Intent调用,并且它返回一个IBind对象以便客户端稍后可以调用这个服务。同一服务被客户端同时启动和绑定是很正常的。

4、与Activity一样,当一个服务被结束是onDestroy方法将会被调用。当没有客户端启动或绑定到一个服务时Android将终结这个服务。与很多Activity时的情况一样,当内存很低的时候Android也可能会终结一个服务。如果这种情况发生,Android也可能在内存够用的时候尝试启动被终止的服务,所以你的服务必须为重启持久保存信息,并且最好在onStart方法内来做。

 

 一、Activity类

1 package com.demo.internet.musicapp; 2  3 import android.app.Activity; 4 import android.content.ComponentName; 5 import android.content.Intent; 6 import android.content.ServiceConnection; 7 import android.os.Bundle; 8 import android.os.IBinder; 9 import android.view.View;10 import android.widget.Button;11 import android.widget.Toast;12 13 14 public class MainActivity extends Activity implements View.OnClickListener{15     private Button btn_start,btn_stop,bind_btn_start,bind_btn_stop,bind_btn_play,bind_btn_pause;16     Intent intent1;17     Intent intent2;18     BindMusicService service;19     ServiceConnection con=new ServiceConnection() {20         @Override21         public void onServiceConnected(ComponentName name, IBinder binder) {22             23             service=((BindMusicService.MyBinder)binder).getService();24         }25 26         @Override27         public void onServiceDisconnected(ComponentName name) {28             29         }30     };31     @Override32     protected void onCreate(Bundle savedInstanceState) {33         super.onCreate(savedInstanceState);34         setContentView(R.layout.activity_main);35         initView();36     }37 38     private void initView() {39         btn_start= (Button) findViewById(R.id.btn_start);40         btn_stop= (Button) findViewById(R.id.btn_stop);41         bind_btn_start= (Button) findViewById(R.id.bind_btn_start);42         bind_btn_stop= (Button) findViewById(R.id.bind_btn_stop);43         bind_btn_play= (Button) findViewById(R.id.bind_btn_play);44         bind_btn_pause= (Button) findViewById(R.id.bind_btn_pause);45         //绑定监听事件46         btn_start.setOnClickListener(this);47         btn_stop.setOnClickListener(this);48         bind_btn_start.setOnClickListener(this);49         bind_btn_stop.setOnClickListener(this);50         bind_btn_play.setOnClickListener(this);51         bind_btn_pause.setOnClickListener(this);52     }53 54 55     @Override56     public void onClick(View v) {57         switch (v.getId()){58             case R.id.btn_start:59                 60                61                 break;62             case R.id.btn_stop:63                64                 break;65 66             case R.id.bind_btn_start:67                 intent2=new Intent(MainActivity.this,BindMusicService.class);68                 bindService(intent2,con,BIND_AUTO_CREATE);//绑定服务69                 break;70             case R.id.bind_btn_play:71                 service.Play();72                 break;73             case R.id.bind_btn_pause:74                 service.Pause();75                 break;76             case R.id.bind_btn_stop:77                 unbindService(con);//解除绑定服务78                 break;79         }80     } 81  }

 

2、Service类

1 package com.demo.internet.musicapp; 2  3 import android.app.Service; 4 import android.content.Intent; 5 import android.content.ServiceConnection; 6 import android.media.MediaPlayer; 7 import android.os.Binder; 8 import android.os.IBinder; 9 import android.util.Log;10 11 public class BindMusicService extends Service {12     private MediaPlayer mPlayer;  //声明一个mediaPlayer对象13     @Override14     public IBinder onBind(Intent intent) {15         Log.i("info", "BindService--onBind()");16         return new MyBinder();17     }18 19     @Override20     public void unbindService(ServiceConnection conn) {21         Log.i("info", "BindService--unbindService()");22         super.unbindService(conn);23     }24 25     @Override26     public void onCreate() {27         Log.i("info", "BindService--onCreate()");28         super.onCreate();29         mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.meizu_music); //实例化对象30         //设置可以重复播放31         mPlayer.setLooping(true);32     }33 34     @Override35     public void onDestroy() {36         Log.i("info", "BindService--onDestroy()");37         super.onDestroy();38         mPlayer.stop();39     }40     //必须通过继承Binder的方式才可以获得binderService服务41     public class MyBinder extends Binder{42         public BindMusicService getService(){43             return BindMusicService.this;44         }45     }46     public void Play(){47         Log.i("info", "播放");48         mPlayer.start();49     }50     public void Pause(){51         Log.i("info", "暂停");52         mPlayer.pause();53     }54 55 }

 

3、在清单文件AndroidManifest.xml中配置Service

1     

 

转载于:https://www.cnblogs.com/yanglu0619/p/4609939.html

你可能感兴趣的文章
gui编程实践(3)--记事本界面 JMenuBar JMenu
查看>>
黑马程序员--抽象类与接口
查看>>
IaaS,PaaS,SaaS 的区别
查看>>
Python复习基础篇
查看>>
关于Cocos2d-x中背景音乐和音效的添加
查看>>
.Net持续集成 —— Jenkins+Git+WebDeploy
查看>>
01_Numpy基本使用
查看>>
checkbox和文字对齐
查看>>
JConsole远程连接配置 服务器监控工具
查看>>
了解HTTP协议栈(实践篇)
查看>>
loj10035. 「一本通 2.1 练习 1」Power Strings
查看>>
%s的用法
查看>>
调用底层不能直接访问的类和方法
查看>>
清理缓存的方法 #DF
查看>>
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>