bindservice与Activity通信

Posted miao_a_miao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bindservice与Activity通信相关的知识,希望对你有一定的参考价值。

 

package com.example.jikangwang.myapplication;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.button)
    Button button;

    @BindView(R.id.progressbar)
    ProgressBar progressBar;
    Handler mHandler;

    volatile boolean flag=true;
    Object object=new Object();


    ServiceConnection serviceConnection;


    MyService myService;
    private int progress = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        serviceConnection=new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                myService=((MyService.MyBinder) service).getService();
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {

            }
        };

        final Intent intent=new Intent(MainActivity.this,MyService.class);

        bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myService.startDownLoad();

                listenProgress();
            }
        });

        MyThread thread=new MyThread();

    }

    public void listenProgress(){
        new Thread(new Runnable() {

            @Override
            public void run() {
                while(progress < myService.MAX_PROGRESS){
                    progress = myService.getProgress();
                    progressBar.setProgress(progress);
                    System.out.println("progress="+progress);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        }).start();
    }


    public class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
        }
    }

}

 

 

package com.example.jikangwang.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;

public class MyService extends Service {

    /**
     * 进度条的最大值
     */
    public static final int MAX_PROGRESS = 100;
    /**
     * 进度条的进度值
     */
    private int progress = 0;

    /**
     * 增加get()方法,供Activity调用
     * @return 下载进度
     */
    public int getProgress() {
        return progress;
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);

    }

    public void startDownLoad(){
        new Thread(new Runnable() {

            @Override
            public void run() {
                while(progress < MAX_PROGRESS){
                    progress += 5;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }).start();
    }


    public class MyBinder extends Binder {
        public MyService getService(){
            return MyService.this;
        }
    }
}

 

以上是关于bindservice与Activity通信的主要内容,如果未能解决你的问题,请参考以下文章

从AILD与bindService谈Binder进程间通信原理(下)

从AILD与bindService谈Binder进程间通信原理(下)

从AILD与bindService谈Binder进程间通信原理(上)

从AILD与bindService谈Binder进程间通信原理(上)

Activity和Service交互之bindService(回调更新UI)

Android Service的全面解析