Android---Service(生命周期、启动方式、服务通信、实战演练)
目 录
一、服务的创建 :
二、服务的生命周期 :
三、服务的启动方式 :
(1)startService 方式 启动 服务 :
实战演练---startService
(2)bindService 方式 启动 服务 :
实战演练---bindService
四、服务的通信
实战演练---音乐播放器
一、服务的创建 :二、服务的生命周期 : 三、服务的启动方式 : (1)startService 方式 启动 服务 :
服务的启动方式 :
startService()方法启动服务,服务会长期的在后台运行,并且服务的状态与开启者的状态没有关系,
即使启动服务的组件已经被销毁,服务会依旧运行。
实战演练---startServicerelative.xml :
MyService.java :
package cn.lwx.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.i("StartService","onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("StartService","onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("StartService","onDestroy()");
}
}
MainActivity.java :
package cn.lwx.service;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.relative);
}
// 开启服务的方法
public void start(View view){
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
// 关闭服务的方法
public void stop(View view){
Intent intent = new Intent(this, MyService.class);
stopService(intent);
}
}
源码【工程文件】--- 可以直接用Gitee拷贝到Android Studio 上。
https://gitee.com/lwx001/Service
筛选LogCat信息 :
运行效果图 :
(2)bindService 方式 启动 服务 : 实战演练---bindService
源码【工程文件】--- 可以直接用Gitee拷贝到Android Studio 上。
https://gitee.com/lwx001/Service2
MainActivity.java :
package cn.lwx.service;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.DialogTitle;
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.View;
public class MainActivity extends AppCompatActivity {
private MyService2.MyBinder myBinder;//成员变量保存返回值
private MyConn myconn; //内部类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.relative2);
}
// // ---Service1---
// // 开启服务的方法
// public void start(View view){
// Intent intent = new Intent(this, MyService.class);
// startService(intent);
// }
//
// // 关闭服务的方法
// public void stop(View view){
// Intent intent = new Intent(this, MyService.class);
// stopService(intent);
// }
//绑定服务
public void btnBind(View view) {
//避免重复创建myconn
if (myconn == null) {
myconn = new MyConn();
}
Intent intent = new Intent(this, MyService2.class);
//参数1是Intent,参数2是连接对象,参数3是flags-表示:如果服务不存在就创建服务
bindService(intent, myconn, BIND_AUTO_CREATE);
}
//解绑服务
public void btnUnbind(View view) {
if (myconn != null) {
unbindService(myconn);
myconn = null;
}
}
//调用服务中的方法
public void btnCall(View view) {
myBinder.callMethodInService();
}
//创建内部类MyConn,用于实现连接服务
private class MyConn implements ServiceConnection {
//当成功绑定到服务时,调用的方法,返回MyService2里面的Ibinder对象
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyService2.MyBinder) service;
Log.i("MainActivity", "服务绑定成功,内存地址为:" + myBinder.toString());
}
//当服务失去连接时,调用的方法
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}
MyService2.java :
package cn.lwx.service;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class MyService2 extends Service {
private static final String TAG = "MyService2"; // logt 回车
public MyService2() {
}
//创建服务的代理,调用服务中的方法
class MyBinder extends Binder {
public void callMethodInService() {
methodInService();
}
}
@Override
public void onCreate() {
Log.i("MyService2", "创建服务,调用onCreate()方法");
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
Log.i("MyService2", "绑定服务,调用onBind()");
return new MyBinder();
}
public void methodInService() {
Log.i("MyService2", "自定义方法 methodInService()");
}
@Override
public boolean onUnbind(Intent intent) {
Log.i("MyService2", "解绑服务,调用onUnbind()");
return super.onUnbind(intent);
}
}
relative.xml :
运行效果图 :
四、服务的通信 实战演练---音乐播放器https://gitee.com/lwx001/MusicPlayer
运行程序,没有声音。不知道为啥,QAQ ~ Help~
菜鸟教程【Service初涉】
https://www.runoob.com/w3cnote/android-tutorial-service-1.html
作者:玉山水
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341