【Android】service入门讲解
来源:互联网 发布:财务报表数据分析范文 编辑:程序博客网 时间:2024/05/22 17:07
转载请注明出处:http://blog.csdn.net/h28496/article/details/44302053
Service是什么
安卓的四大组件之一。实际效果和Activity差不多。在实际的使用中来看,Service如同是一个没有界面的Activity。
什么时候使用Service
需要做和Activity差不多的事,但是又没必要占用一个界面时就可以使用Service。
初学者关于Service的常见认知错误
有初学者误以为Service是一个线程,实际上Service不是一个线程,它工作在主线程中。
和上面类似,有的初学者误以为Service是和进程分开的,实际上,一般情况下Service是作为启动它的进程的一部分。
启动Service的两种方式
Context.startService(Intent intent)
调用服务者与服务没有关联,即使调用者不存在了,服务依然运行。
Context.bindService(Intent intent)
调用服务者与服务绑定,调用者退出,服务也退出。
Service的生命周期
相比Activity简单得多
第一次启动Service之后,依次调用onCreate()、onStart(),之后运行。
当Service停止运行时,将会调用onDestroy()。
注意:
① 如果Service没有Destroy,无论启动多少次都只有第一次才会执行onCreate()。除了第一次以外的都只会执行onStart()。
② 在API5之后 onStart()就被废弃了,我们可以用onStartCommand()代替。
代码示例
MyService.java
package zhp.app.servicetest;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Bundle;import android.os.IBinder;public class MyService extends Service {private MediaPlayer mediaPlayer;// ==============================// 继承或重写的方法// ==============================@Overridepublic IBinder onBind(Intent arg0) {return null;}@Overridepublic void onCreate() {// 在创建Service的时候初始化MediaPlayerinitMediaPlayer();super.onCreate();}@Overridepublic void onDestroy() {// 在服务结束的时候停止播放音乐musicStop();super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// 接收数据指令,并按指令执行if (intent != null) {Bundle bundle = intent.getExtras();if (bundle != null) {String command = bundle.getString("message");switch (command) {case "play":musicPlay();break;case "pause":musicPause();break;}}}return super.onStartCommand(intent, flags, startId);}// ==============================// 方法// ==============================/** * 初始化MediaPlayer */private void initMediaPlayer() {if (mediaPlayer == null) {mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.bgm);}mediaPlayer.seekTo(0);}/** * 音乐播放 */public void musicPlay() {if (mediaPlayer == null) {initMediaPlayer();}mediaPlayer.start();}/** * 音乐暂停 */public void musicPause() {if (mediaPlayer != null) {mediaPlayer.pause();}}/** * 音乐结束 */public void musicStop() {if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;}}}
MainActivity.java
package zhp.app.servicetest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic void onClick(View v) {// 和Activity的启动一样Intent intent = new Intent(this, MyService.class);Bundle bundle = new Bundle();switch (v.getId()) {case R.id.main_play:bundle.putString("message", "play");break;case R.id.main_pause:bundle.putString("message", "pause");break;case R.id.main_stop:stopService(intent);return;}// 在这里传送数据,Service在onStartCommand()中接收数据intent.putExtras(bundle);// Activity是startActivity(), Service是startService()// 也可以改为Service的另外一种启动方式: bindService()startService(intent);}}
Service和Activity都需要在manifest中注册:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" > </service> </application>
0 0
- 【Android】service入门讲解
- android Service 启动讲解
- [Android]Service讲解
- Android中service讲解
- android service简单讲解
- android笔记:service讲解
- Android Service 服务详细讲解
- Android Service 服务详细讲解
- Android Service 服务详细讲解
- android编写Service入门
- Android下Service入门
- android编写Service入门
- android编写Service入门
- android编写Service入门
- android编写Service入门
- android编写Service入门
- android编写Service入门
- android编写Service入门
- Java基础班第二天--面向对象
- web前端规范整理
- xampp在linux下无法使用mysql命令
- ruby基于SMTP发送带附件的邮件
- SAP ABAP性能优化
- 【Android】service入门讲解
- 面向对象的思想举例--把大象装进冰箱
- 禁止右键弹出菜单
- md5加入指定的加密规则,进行加密
- 深入理解ThreadLocal
- HashSet的实现原理
- js在html特定位置添加dom元素
- BBOSS框架,获得service方法,和Dao方法对象的方式。
- 类的初始化内存图解