zoukankan      html  css  js  c++  java
  • Android service的开启和绑定,以及调用service的方法

    界面:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
            >
        <Button android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="开启服务"
                android:onClick="start"
                />
    
        <Button android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="关闭服务"
                android:onClick="close"
                />
    
        <Button android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="绑定服务"
                android:onClick="bind"
                />
    
        <Button android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="取消绑定服务"
                android:onClick="unbind"
                />
    
        <Button android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="调用服务的方法function()"
                android:onClick="callFunction"
                />
    </LinearLayout>

    Activity

    package com.example.serviceTest;
    
    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.view.View;
    
    public class MyActivity extends Activity {
    
        private IService myBinder;
        private ServiceConnection myConn = new MyConn();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    
        public void start(View view) {
            startService(new Intent(this, TestService.class));
        }
    
        /**
         * 多次调用停止服务,没有出现问题(不能多次解绑)
         */
        public void close(View view) {
            stopService(new Intent(this, TestService.class));
        }
    
    
        public void bind(View view) {
            Intent intent = new Intent(this, TestService.class);
            bindService(intent, myConn, BIND_AUTO_CREATE);
        }
    
        /**
         * 多次解绑服务会报出错误
         */
        public void unbind(View view) {
            unbindService(myConn);
        }
    
        public void callFunction(View view) {
            if (myBinder != null) {
                myBinder.callFunction();
            }
        }
    
        //绑定的时候,回调的一些方法
        class MyConn implements ServiceConnection {
    
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                System.out.println("获取到binder");
                myBinder = (IService) service;
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                System.out.println("com.example.serviceTest.MyActivity.MyConn.onServiceDisconnected");
            }
        }
    }


    Service

    package com.example.serviceTest;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.widget.Toast;
    
    /**
     * Created by Heyiyong on 14-5-16.
     */
    public class TestService extends Service {
    
        public IBinder onBind(Intent intent) {
            System.out.println("服务被绑定了!");
            return new MyBinder();
        }
    
        //中间人(service的代理)
        private class MyBinder extends Binder implements IService{
            public void callFunction() {
                function();
            }
        }
    
        @Override
        public void onCreate() {
            System.out.println("com.example.serviceTest.TestService.onCreate");
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            System.out.println("com.example.serviceTest.TestService.onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            System.out.println("com.example.serviceTest.TestService.onDestroy");
        }
    
        @Override
        public boolean onUnbind(Intent intent) {
            System.out.println("com.example.serviceTest.TestService.onUnbind");
            return super.onUnbind(intent);
        }
    
        public void function() {
            Toast.makeText(getApplicationContext(), "function()方法被调用了!", 1).show();
            System.out.println("com.example.serviceTest.TestService.function");
        }
    }
  • 相关阅读:
    zabbix 3.4自动化监控(6)
    zabbix 3.4 web监控(5)
    童年
    CSDN中快速转载别人文章
    10个提升效率的编程好习惯(转载)
    解决vscode中vim插件,不能使用Ctrl+c
    英语复习安排
    比勤奋更能拉开人生差距的,是成长型思维
    转载文章
    红宝书考研资料
  • 原文地址:https://www.cnblogs.com/wuyou/p/3733631.html
Copyright © 2011-2022 走看看