Android(安卓)四大组件之 Service
16lz
2022-03-16
1 生命周期图
2 第一种 非绑定方式 startService
2.1 自定义 Service
package com.demoservice;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;import android.util.Log;public class FirstService extends Service { MediaPlayer mplayer; Binder binder=new Binder(); @Override public IBinder onBind(Intent intent) { // TODO 自动生成的方法存根 return binder; } @Override public void onCreate() { // TODO 自动生成的方法存根 super.onCreate(); mplayer=MediaPlayer.create(this, R.raw.music12); Log.i("demo", "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO 自动生成的方法存根 Log.i("demo", "onStartCommand"); mplayer.start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO 自动生成的方法存根 Log.i("demo", "onDestroy"); mplayer.stop(); super.onDestroy(); }}
2.2 注册 Service
<service android:name="com.demoservice.FirstService"> <intent-filter > <action android:name="michael.FIRSTSERVICE"/> </intent-filter></service>
2.3 开启/关闭 Service
package com.demoservice;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity { Button btn_start,btn_stop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_start=(Button)findViewById(R.id.btn_start); btn_stop=(Button)findViewById(R.id.btn_stop); final Intent intent=new Intent(); intent.setAction("michael.FIRSTSERVICE"); OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if(v == btn_start) { startService(intent); }else if(v==btn_stop) { stopService(intent); } } }; btn_start.setOnClickListener(listener); btn_stop.setOnClickListener(listener); }}
3 第二种 绑定方式 bindService
3.1 自定义 Service
package com.SecondService;import com.demoservice.R;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;import android.util.Log;public class SecondService extends Service { int count; boolean quit=false; MediaPlayer mplayer; MyBinder binder=new MyBinder(); @Override public IBinder onBind(Intent intent) { // TODO 自动生成的方法存根 Log.i("demo", "onBind"); mplayer.start(); new Thread() { @Override public void run() { while(!quit) { try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} count++; Log.i("demo", String.valueOf(count)); } } }.start(); return binder; } @Override public boolean onUnbind(Intent intent) { Log.i("demo", "onUnbind"); quit=true; return super.onUnbind(intent); } @Override public void onRebind(Intent intent) { Log.i("demo", "onRebind"); mplayer.start(); super.onRebind(intent); } @Override public void onCreate() { super.onCreate(); quit=false; mplayer=MediaPlayer.create(this, R.raw.music12); Log.i("demo", "onCreate"); } @Override public void onDestroy() { Log.i("demo", "onDestroy"); mplayer.stop(); quit=true; super.onDestroy(); } class MyBinder extends Binder { public SecondService getService() { return SecondService.this; } public int getCount() { return count; } }}
3.2 注册 Service
<service android:name="com.SecondService.SecondService"> <intent-filter > <action android:name="michael.SECONDSERVICE"/> </intent-filter></service>
3.3 绑定/解绑Service
package com.SecondService;import com.demoservice.R;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.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity { SecondService mservice; ServiceConnection conn=new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO 自动生成的方法存根 Log.i("demo", "onServiceDisconnected"); mservice=null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO 自动生成的方法存根 Log.i("demo", "onServiceConnecteds"); mservice = ((SecondService.MyBinder)service).getService(); } }; Button btn_start,btn_stop,btn_get; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_start=(Button)findViewById(R.id.btn_start); btn_get=(Button)findViewById(R.id.btn_get); btn_stop=(Button)findViewById(R.id.btn_stop); final Intent intent=new Intent(); intent.setAction("michael.SECONDSERVICE"); OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if(v == btn_start) { bindService(intent, conn, BIND_AUTO_CREATE); }else if(v==btn_stop) { unbindService(conn); }else if(v==btn_get) { btn_get.setText(String.valueOf(mservice.binder.getCount())); } } }; btn_start.setOnClickListener(listener); btn_stop.setOnClickListener(listener); btn_get.setOnClickListener(listener); }}
注:转载请注明出处 :) 毕竟代码是一个一个敲出来的啊,O(∩_∩)O~
更多相关文章
- Android(安卓)DEX方法超过64K和gradle编译OOM解决方案
- Android中Java反射技术的使用示例
- Unity3D Vuforia Android(安卓)拨打电话
- Android之Loader理解
- Android运行虚拟机报错Execution failed for task ':app:transfo
- Android(安卓)Post方法请求URL 迭代器
- android登录简单窗口
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用