背景音乐的实现
2015-06-30 11:38
239 查看
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类
2、Service类
3、在清单文件AndroidManifest.xml中配置Service
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类
package com.demo.internet.musicapp; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements View.OnClickListener{ private Button btn_start,btn_stop,bind_btn_start,bind_btn_stop,bind_btn_play,bind_btn_pause; Intent intent1; Intent intent2; BindMusicService service; ServiceConnection con=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder binder) { service=((BindMusicService.MyBinder)binder).getService(); } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btn_start= (Button) findViewById(R.id.btn_start); btn_stop= (Button) findViewById(R.id.btn_stop); bind_btn_start= (Button) findViewById(R.id.bind_btn_start); bind_btn_stop= (Button) findViewById(R.id.bind_btn_stop); bind_btn_play= (Button) findViewById(R.id.bind_btn_play); bind_btn_pause= (Button) findViewById(R.id.bind_btn_pause); //绑定监听事件 btn_start.setOnClickListener(this); btn_stop.setOnClickListener(this); bind_btn_start.setOnClickListener(this); bind_btn_stop.setOnClickListener(this); bind_btn_play.setOnClickListener(this); bind_btn_pause.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_start: break; case R.id.btn_stop: break; case R.id.bind_btn_start: intent2=new Intent(MainActivity.this,BindMusicService.class); bindService(intent2,con,BIND_AUTO_CREATE);//绑定服务 break; case R.id.bind_btn_play: service.Play(); break; case R.id.bind_btn_pause: service.Pause(); break; case R.id.bind_btn_stop: unbindService(con);//解除绑定服务 break; } } 81 }
2、Service类
package com.demo.internet.musicapp; import android.app.Service; import android.content.Intent; import android.content.ServiceConnection; import android.media.MediaPlayer; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class BindMusicService extends Service { private MediaPlayer mPlayer; //声明一个mediaPlayer对象 @Override public IBinder onBind(Intent intent) { Log.i("info", "BindService--onBind()"); return new MyBinder(); } @Override public void unbindService(ServiceConnection conn) { Log.i("info", "BindService--unbindService()"); super.unbindService(conn); } @Override public void onCreate() { Log.i("info", "BindService--onCreate()"); super.onCreate(); mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.meizu_music); //实例化对象 //设置可以重复播放 mPlayer.setLooping(true); } @Override public void onDestroy() { Log.i("info", "BindService--onDestroy()"); super.onDestroy(); mPlayer.stop(); } //必须通过继承Binder的方式才可以获得binderService服务 public class MyBinder extends Binder{ public BindMusicService getService(){ return BindMusicService.this; } } public void Play(){ Log.i("info", "播放"); mPlayer.start(); } public void Pause(){ Log.i("info", "暂停"); mPlayer.pause(); } }
3、在清单文件AndroidManifest.xml中配置Service
<service android:name=".AudioService" />
相关文章推荐
- Tiny模板引擎之开发工具
- 在Ubuntu或Debian系统的服务器上卸载MySQL的方法
- 《猜猜看》之界面设置
- 查看网络图片
- ios crash文件收集(一)
- 使用POI中的XSSFWorkbook操作excel2007(xlsx)的异常:找不到类解决
- 怎样确定 Org 所用的 Ledger 是什么
- MySQL导入sql脚本错误:2006 - MySQL server has gone away
- 【算法】弗洛伊德(Floyd)算法
- ldconfig 的问题
- Excel中的資料 匯入到DB
- VC实现对话框窗口任意分割
- OJ第三批——Problem E:C++习题 输入输出--私有继承
- Native method not found: com.autonavi.amap.mapcore.MapCore.nativeNewInstance
- What is Complex Event Processing? (Part 3)
- snmp agent 表格实现(子代理方式实现)
- WPF的布局-Grid(表格布局)
- 矩阵蛇形填充
- ubuntu kylin 14.04启用root账户登录
- esxtop命令磁盘监控工具详解