zoukankan      html  css  js  c++  java
  • 旺仔练习:service的普通方式和绑定方式的启动和停止

    package com.example.administrator.test.Fragment.Service;
    
    import android.app.IntentService;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.net.Uri;
    import android.os.IBinder;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    import com.example.administrator.test.R;
    import com.google.android.gms.appindexing.Action;
    import com.google.android.gms.appindexing.AppIndex;
    import com.google.android.gms.appindexing.Thing;
    import com.google.android.gms.common.api.GoogleApiClient;
    
    public class TestService extends AppCompatActivity {
    
    
        public void bt1_OnClick(View v) {
    
            Intent intent = new Intent( this, MyService.class );
            intent.putExtra( "test", "发送的数据" );
            startService( intent );
            Toast.makeText( this, "MyService已启动", Toast.LENGTH_SHORT ).show();
        }
    
        public void bt2_OnClick(View v) {
    
            Intent intent = new Intent( this, MyService.class );
            stopService( intent );
            Toast.makeText( this, "MyService已停止", Toast.LENGTH_SHORT ).show();
        }
    
        ServiceConnection sc;
        MyService.MyBinder myb;
    
        //绑定方式
        public void bt3_OnClick(View v) {
            Intent intent = new Intent( this, MyService.class );
            if (sc == null) sc = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                    //接收代理对象
                    myb = (MyService.MyBinder) iBinder;
                    Toast.makeText( TestService.this, "绑定启动完成,接收返回的对象,读取到的数据="+myb.getTest(), Toast.LENGTH_SHORT ).show();
                }
    
                @Override
                public void onServiceDisconnected(ComponentName componentName) {
                    Toast.makeText( TestService.this, "服务连接断开", Toast.LENGTH_SHORT ).show();
                }
            };
            //三个参数:1.意图2.服务连接3.启动方式
            bindService( intent, sc, Context.BIND_AUTO_CREATE );//自动创建
        }
        //解除绑定
        public void bt4_OnClick(View v)
        {
            if (sc!=null)
            {
                unbindService( sc );
                sc=null;
            }else
            {
                Toast.makeText( this, "清先绑定服务", Toast.LENGTH_SHORT ).show();
            }
        }
    
    
    }
    package com.example.administrator.test.Fragment.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 {
        public MyService() {
            Log.e( "TAG","MyService被构造" );
        }
    
        @Override
        public void onCreate() {
            Log.e("TAG","onCreate被调用");
            super.onCreate();
        }
    
        @Override
        public void onDestroy() {
            Log.e("TAG","onDestroy被调用");
            super.onDestroy();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
           String str= intent.getStringExtra( "test" );
            Log.e("TAG","onStartCommand被调用,并收到数据="+str);
            return super.onStartCommand( intent, flags, startId );
        }
    
        @Override
        public void onRebind(Intent intent) {
            Log.e("TAG","onRebind被调用");
    
            super.onRebind( intent );
        }
    
        @Override
        public boolean onUnbind(Intent intent) {
            Log.e("TAG","onUnbind被调用");
            return super.onUnbind( intent );
        }
    
        //代理对象,自定义类
        public class MyBinder extends Binder
        {
            //定义数据交互的方法
            public int getTest()
            {
                return 123;
            }
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            Log.e("TAG","onBind被调用");
    
    
            // TODO: Return the communication channel to the service.
            //throw new UnsupportedOperationException( "Not yet implemented" );
            return new MyBinder();
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
      >
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="普通方式启动"
            android:onClick="bt1_OnClick"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="普通方式停止"
            android:onClick="bt2_OnClick"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="绑定方式启动"
            android:onClick="bt3_OnClick"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="解绑方式停止"
            android:onClick="bt4_OnClick"/>
    </LinearLayout>
  • 相关阅读:
    10个你可能不知道的JavaScript小技巧
    QuickFlow2.0 安装指南
    QuickFlow教程(5): RuleDriven活动,角色提供程序自定义,邮件模板
    QuickFlowDesigner教程(2)工作流表单快速自定义
    QuickFlowDesigner1.0(Build091025)发布
    QuickFlow2.0无代码工作流设计器QuickFlowDesigner1.0 beta publish
    QuickFlowDesigner教程(3)UI代码和工作流交互
    QuickFlow Aspx Form example deploy wizard
    多选用户字段的Caml查询问题
    QuickFlowDesigner教程(4)如何用代码控制活动操作人
  • 原文地址:https://www.cnblogs.com/jiang2538406936/p/5728614.html
Copyright © 2011-2022 走看看