Android的Service本地服务通信

该文章详细介绍了在Android应用程序中,如何通过MainActivity绑定和解绑自定义服务MyService,以及使用Binder进行数据通信的过程。MainActivity通过ServiceConnection连接到MyService,并通过MyService的Binder对象获取服务的状态信息。
摘要由CSDN通过智能技术生成

目录

一、MainActivity和main_cativity

二、MyService和配置

三、演示


一、MainActivity和main_cativity

MainActivity代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button bind_btn,unbind_btn,get_btn;
    private MyService.MyBinder myBinder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init(){
        bind_btn = findViewById(R.id.bind_btn);
        unbind_btn = findViewById(R.id.unbind_btn);
        get_btn = findViewById(R.id.get_btn);
        bind_btn.setOnClickListener(this);
        unbind_btn.setOnClickListener(this);
        get_btn.setOnClickListener(this);
    }


    //定义一个ServiceConnection 对象
    private ServiceConnection connection = new ServiceConnection(){
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder){
            Log.v("MainActivity","服务连接成功");
            myBinder=(MyService.MyBinder)iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName){
            Log.v("MainActivity","服务断开连接");
        }
    };


    @Override
    public void onClick(View view){
        switch (view.getId()) {
            case R.id.bind_btn:
                //绑定服务service
                Intent intent = new Intent(this, MyService.class);
                bindService(intent, connection, BIND_AUTO_CREATE);
                Toast.makeText(this,"绑定成功",Toast.LENGTH_SHORT).show();
                break;

            case R.id.unbind_btn:
                unbindService(connection);
                Toast.makeText(this,"解绑成功",Toast.LENGTH_SHORT).show();
                break;

            case R.id.get_btn:
                Toast.makeText(this, "获取服务"+myBinder.getCount(), Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}

 activity_main代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.MainActivity">

    <Button
        android:id="@+id/bind_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="绑定"/>

    <Button
        android:id="@+id/unbind_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="解绑"/>

    <Button
        android:id="@+id/get_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询"/>


</LinearLayout>

二、MyService和配置

public class MyService extends Service {

    private int count;
    private boolean stop; //充当服务的状态//确定是否停止count计数
    //定义onBinder方法返回的对象
    private MyBinder binder =new MyBinder();
    public class MyBinder extends Binder {
        //获取 Service的运行状态
        public int getCount(){
            return count;
        }
    }
    public IBinder onBind(Intent intent){
        Log.v("MyService","绑定服务成功");
        return binder;
    }

    @Nullable
    @Override
    public void onCreate() {
        super.onCreate();
        Log.v("MyService","创建成功");

        new Thread(){
            @Override
            public void run() {
                super.run();
                while (!stop){
                    try{
                        Thread.sleep(1000);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    count++;
                }
            }
        }.start();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.v("MyService","服务解除绑定");
        return true;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        this.stop = true;
        Log.v("MyService","服务解除");
    }
}

 <application>  放在里面 </application>

<service android:name=".service.MyService"/>
<!-- 上面的不行就试一试下面的配置 -->
<!--service android:name=".MyService"/-->

三、演示

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值