• 旺仔练习:service的普通方式和绑定方式的启动和停止(解绑出现异常,尚未解决)


    package com.hanqi.dianhuabohaoqi;
    
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.IBinder;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class usingservice extends AppCompatActivity {
        Button bt_1,bt_2,bt_3,bt_4;
        Intent intentservice;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_usingservice);
            bt_1=(Button)findViewById(R.id.bt_1);
            bt_2=(Button)findViewById(R.id.bt_2);
            bt_3=(Button)findViewById(R.id.bt_3);
            bt_4=(Button)findViewById(R.id.bt_4);
            bt_1.setOnClickListener(new start_service());
            bt_2.setOnClickListener(new start_service());
            bt_3.setOnClickListener(new start_service());
            bt_4.setOnClickListener(new start_service());
            intentservice=new Intent(this,EchoService.class);
    
        }
       class start_service implements View.OnClickListener
       {
           ServiceConnection sc;
           public void onClick(View v)
           {
               if (sc==null){
                   sc= new ServiceConnection() {
                       @Override
                       public void onServiceConnected(ComponentName name, IBinder service) {
                           //接收代理对象进行强转
                           EchoService.MyBind echo=(EchoService.MyBind)service;
    
                           Toast.makeText(usingservice.this, "绑定service成功连接,接收返回对象="+echo.gettest(), Toast.LENGTH_SHORT).show();
                       }
    
                       @Override
                       public void onServiceDisconnected(ComponentName name) {
    
                       }
                   };
               }
    
               switch (v.getId())
               {
                   case R.id.bt_1://启动service
                       startService(intentservice);
                       break;
                   case R.id.bt_2://停止service
                       stopService(intentservice);
                       break;
                   case R.id.bt_3://绑定方式启动service
                       bindService(intentservice,sc , Context.BIND_AUTO_CREATE);
                       break;
                   case R.id.bt_4://解除绑定
                       if (sc!=null){
                       unbindService(sc);
                           sc=null;
                       }else
                       {
                           Toast.makeText(usingservice.this, "清先绑定服务", Toast.LENGTH_SHORT).show();
                       }
                       break;
               }
           }
       }
    }
    package com.hanqi.dianhuabohaoqi;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.util.Log;
    
    public class EchoService extends Service {
        public EchoService() {
            Log.e("TAG","service被构造");
        }
    
    
        @Override
        public void onCreate() {
            Log.e("TAG","启动service");
            super.onCreate();
        }
    
        @Override
        public void onDestroy() {
            Log.e("TAG","停止service");
            super.onDestroy();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.e("TAG","onStartCommand被调用");
            return super.onStartCommand(intent, flags, startId);
        }
        @Override
        public boolean onUnbind(Intent intent) {
            Log.e("TAG","onUnbind被调用");
            return super.onUnbind(intent);
        }
        //内部类
        public class MyBind extends Binder
        {
          //定义数据交互的方法
            public int gettest()
            {
                return 123;
            }
        };
    
        @Override
        public IBinder onBind(Intent intent) {
            Log.e("TAG","onBind被调用");
           // throw new UnsupportedOperationException("Not yet implemented");
            return new MyBind();
    
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.hanqi.dianhuabohaoqi.usingservice">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt_1"
            android:text="启动service"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt_2"
            android:text="停止service"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt_3"
            android:text="绑定service"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt_4"
            android:text="解除绑定service"/>
    
    </LinearLayout>
  • 相关阅读:
    工序打扎流程(自定义按钮移动、群响应。)
    将FAT磁盘转化为NTFS格式。
    VC监视新硬件插入电脑。
    VC读取分析网络文件
    工序打扎流程(箭头实现、刷新画面)
    VC实现自定义按钮响应拖动
    VC中ListCtrl经验总结【转载】
    C++的优先级
    VC画面闪烁及解决方法
    改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景
  • 原文地址:https://www.cnblogs.com/jiang2538406936/p/5675990.html
Copyright © 2020-2023  润新知