接着上文程序。
IBinder:在android中用于远程操作对象的一个基本接口,可以实现进度监控。
首先,将MyService里面的IBinder返回值改成
return new MyBinder();
对于onBind方法而言,要求返回Binder对象,实际上,我们会自己定义一个内部类,集成Binder类,如下:
class MyBinder extends Binder {
//定义自己需要的方法(实现进度监控)
public int getProcess(){
return i;
}
}
启动服务 :创建——启动——摧毁,在创建里面启一个线程(从1数到100,用于模拟耗时任务),程序如下:
@Override
public void onCreate() {
super.onCreate();
Log.e("TAG","服务创建了");
//开启一个线程(从1数到100,用于模拟耗时任务)
new Thread(){
@Override
public void run() {
for (int i=0;i<=100;i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
每次点击创建,都会执行如下代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("TAG","服务启动了");
return super.onStartCommand(intent, flags, startId);
}
进行实时的监控:
//当客户端正常连接着服务器时,执行服务的绑定操作会被调用
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.e("TAG","慕课");
MyService.MyBinder mb= (MyService.MyBinder) iBinder;
//得到进度
int step=mb.getProcess();
Log.e("TAG","当前进度时:"+step);
}
//当客户端和服务器的连接丢失了
MainActivity完整代码如下:
package com.example.service;
import androidx.appcompat.app.AppCompatActivity;
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 {
//IBinder
//Service Connection 用于绑定客户端和Service
//进度监控
private ServiceConnection conn=new ServiceConnection() {
//当客户端正常连接着服务器时,执行服务的绑定操作会被调用
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.e("TAG","慕课");
MyService.MyBinder mb= (MyService.MyBinder) iBinder;
//得到进度
int step=mb.getProcess();
Log.e("TAG","当前进度时:"+step);
}
//当客户端和服务器的连接丢失了
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void operate(View v) {
switch (v.getId()){
case R.id.start:
//启动服务 :创建——启动——摧毁
//如果服务已经创建了,后续重复启动,操作的都是同一个服务,不回在创建新 的服务,除非先摧毁他
Intent it1=new Intent(this,MyService.class);
startService(it1);
break;
case R.id.stop:
Intent it2=new Intent(this,MyService.class);
stopService(it2);
break;
case R.id.bind:
//绑定服务
Intent it3=new Intent(this,MyService.class);
bindService(it3,conn,BIND_AUTO_CREATE);
break;
case R.id.unbind:
//绑定服务:最大的作用就是用来实现对Service执行的任务进行进度监控
//解绑服务
unbindService(conn);//解绑服务
break;
}
}
}
MyService完整代码如下:
package com.example.service;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
private int i;
public MyService() {
}
//创建
@Override
public void onCreate() {
super.onCreate();
Log.e("TAG","服务创建了");
//开启一个线程(从1数到100),用于模拟耗时的任务
new Thread(){
@Override
public void run() {
super.run();
try {
for (i = 1; i <= 100; i++) {
sleep(100);
}
}catch (Exception e){
e.printStackTrace();
}
}
}.start();
}
//启动方法
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("TAG","服务启动了");
return super.onStartCommand(intent, flags, startId);
}
//解绑
@Override
public boolean onUnbind(Intent intent) {
Log.e("TAG","服务解绑了");
return super.onUnbind(intent);
}
//摧毁
@Override
public void onDestroy() {
Log.e("TAG","服务摧毁了");
super.onDestroy();
}
//绑定方法
//IBinder:在android中用于远程操作对象的一个基本接口
//对于onBind方法而言,要求返回Binder对象
//实际上,我们会自己定义一个内部类,集成Binder类
class MyBinder extends Binder {
//定义自己需要的方法(实现进度监控)
public int getProcess(){
return i;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
Log.e("TAG", "服务绑定了");
//Binder
return new MyBinder();
}
}
今天的文章Service基础(实现IBinder)(二)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23982.html