zoukankan      html  css  js  c++  java
  • 旺仔练习: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>
  • 相关阅读:
    所谓的日常 #8
    所谓的日常 #7
    所谓的日常 #6
    所谓的日常 #5
    所谓的日常 #4
    所谓的日常 #3
    DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)
    Codeforces Round #366 (Div. 2)
    2016 Multi-University Training Contests
    DP套DP HDOJ 4899 Hero meet devil(国王的子民的DNA)
  • 原文地址:https://www.cnblogs.com/jiang2538406936/p/5675990.html
Copyright © 2011-2022 走看看