服务的四种启动方式
来源:互联网 发布:网络推广文案典型案例 编辑:程序博客网 时间:2024/05/21 02:48
第一种:使用startService启动服务
第二种:使用Receiver方式启动服务
第三种:使用bindService方式启动服务
第四种:通过AIDL方式使用远程服务
我将通过一个具体的android实例来分别讲解这四种服务启动方式。该项目的实现效果如下:
主页面为一个imageView和四个Button按钮,分别通过四个按钮跳转到不同的activity,每一个activity对应一种服务的启动方式。
这是第一个Activity:
包含一个imageView和五个button按钮。分别实现音乐的播放,停止,暂停,关闭和退出功能。
第一个Activity实现代码如下:
import android.R.integer;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;public class PlayMusic extends Activity implements OnClickListener{private static final String TAG="PlayMusic";private Button playBtn,stopBtn,pauseBtn,exitBtn,closeBtn;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.music_service);setTitle("Music Service");findView();bindButton();}private void findView(){playBtn=(Button) findViewById(R.id.play);stopBtn=(Button) findViewById(R.id.stop);pauseBtn=(Button) findViewById(R.id.pause);exitBtn=(Button) findViewById(R.id.exit);closeBtn=(Button) findViewById(R.id.close);}private void bindButton(){playBtn.setOnClickListener(this);stopBtn.setOnClickListener(this);pauseBtn.setOnClickListener(this);exitBtn.setOnClickListener(this);closeBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubint op=-1;Intent intent=new Intent("com.lqh.servicetest.MusicService");switch (v.getId()) {case R.id.play: Log.d(TAG,"onClick:playing music");op=1;break;case R.id.pause: Log.d(TAG,"onClick:pausing music");op=2;break;case R.id.stop: Log.d(TAG,"onClick:stoping music");op=3;break;case R.id.close: Log.d(TAG,"onClick:close");this.finish();break;case R.id.exit: Log.d(TAG,"onClick:exit");stopService(intent);this.finish();return;}Bundle bundle=new Bundle();bundle.putInt("op", op);intent.putExtras(bundle);startService(intent);}}建议大家通过上面的这种方式来书写代码。将findViewById()独立出来,便于以后的维护。然后分别设置监听。创建Intent对象,设置action,用于启动服务。这里只需要保证创建Intent()时传入的action参数和AndroidManifest.xml中注册服务的action一致即可。配置文件通过标志变量op来指定实现不同的功能。然后通过Bundle对象存入op标志,然后通过startService()传入intent对象,即可启动服务。
接下来我们来分析服务代码:
import android.R.integer;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Bundle;import android.os.IBinder;import android.util.Log;import android.widget.Toast;public class MusicService extends Service {private MediaPlayer mediaPlayer;@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}public void onCreate(){Toast.makeText(this, "启动音乐播放器", Toast.LENGTH_SHORT).show();if(mediaPlayer==null){mediaPlayer=MediaPlayer.create(this, R.raw.tmp);mediaPlayer.setLooping(false);}}public void onDestroy(){Toast.makeText(this, "停止音乐播放器", Toast.LENGTH_SHORT).show();if(mediaPlayer!=null){mediaPlayer.stop();mediaPlayer.release();}}public void onStart(Intent intent,int startId){if(intent!=null){Bundle bundle=intent.getExtras();if(bundle!=null){int op=bundle.getInt("op");switch (op) {case 1:play();break;case 2:pause();break;case 3:stop();break;}}}}public void play(){if(!mediaPlayer.isPlaying()){mediaPlayer.start();}}public void pause(){if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.pause();}}public void stop(){if(mediaPlayer!=null){mediaPlayer.pause();mediaPlayer.seekTo(0);}}}在服务代码中,首先创建一个MediaPlayer对象。这是android内置的音乐服务类。通过mediaPlayer对象调用相应的方法即可实现不同的音乐播放器功能。由于我们是通过startService()启动服务。所以可以忽略OnBind()方法。通过startService()启动服务的步骤如下:
onCreate()->onStart()->Service running->onDestroy()->Service stop
首先在onCreate()中我们先判断mediaPlayer对象是否为空,如果为空则创建一个媒体播放器对象用于播放音频文件,然后使用指定的音频文件初始化播放器。这里我用的音频文件名为tmp,MP3格式。然后设置为不循环播放。
然后onStart()中,创建Bundle对象用于保存从PlayMusic传过来的标志位op。然后分别通过op的值启动不同的方法。然后重写一下这些方法。即可实现音乐的播放,暂停,停止等功能。
最后。在AndroidManifest.xml中注册一下服务MusicService和Activity即可。
<activity android:name=".PlayMusic"/><service android:enabled="true" android:name=".MusicService" > <intent-filter> <action android:name="com.lqh.servicetest.MusicService"/> </intent-filter></service>
其他三种服务启动方式我将在后面的博文中展示。
阅读全文
1 0
- 服务的四种启动方式
- 服务的启动方式
- tomcat部署服务的四种方式
- tomcat部署服务的四种方式
- 启动Oracle服务的几种方式
- servlet启动服务的两种方式
- Linux 启动服务的三种方式
- SpringBoot启动服务的三种方式
- dubbo服务的三种启动方式
- Oracle数据库的四种启动方式
- Activity的四种LaunchMode(启动方式)
- Activity的四种启动方式
- Activity 的四种启动方式
- Activity的四种启动方式
- activity的四种启动方式
- Activity的四种启动方式
- MySQL启动的四种方式
- activity 的四种启动方式
- 深入探索 Java 热部署
- android大图、高清图片处理
- linux常用命令
- 1225 八数码难题
- Win form性能优化工具Stopwatch
- 服务的四种启动方式
- shiro学习笔记3——组件之授权
- Android app中将图片保存到本地相册并自命名相册名的代码方法
- 慢工出细活,Facebook点赞按钮设计中的门道
- 启动Maven项目 死活报404 配置文件都没问题
- 用fiddler工具做接口测试
- spring框架简单应用--aop
- angualrjs之注册页面
- Android内存泄漏总结