• 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");
        }
    }
  • 相关阅读:
    scroll事件实现监控滚动条改变标题栏背景透明度(zepto.js )
    瀑布流-转载
    如何清除img图片下面有一片空白
    加减号改变input[type=number]的数值,基于[zepto.js]
    如何移除HTML5的type=""number""的input标签的上下箭头
    滑屏框架
    GO_06:GO语言基础之struct
    GO_05:GO语言基础map与函数
    GO_04:GO语言基础条件、跳转、Array和Slice
    GO_03:GO语言基础语法
  • 原文地址:https://www.cnblogs.com/wuyou/p/3733631.html
Copyright © 2020-2023  润新知