码迷,mamicode.com
首页 > 移动开发 > 详细

Android之Service通信-(2)

时间:2015-09-11 23:23:53      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

一、Service通过IBinder与Activity进行通信

在Service中进行下载

Service

package chuiyuan.lsj.androidjava.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class DownloadService extends Service {
    private String TAG ="MainService" ;

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

    public void startDownload() throws InterruptedException{
        //可以看出,这里是在主线程,所以如果真的下载,应该另开一个线程
        Toast.makeText(DownloadService.this,"start download:"+Thread.currentThread().getName(),
                Toast.LENGTH_LONG).show();
        Thread.sleep(2);
        Toast.makeText(DownloadService.this, "download end", Toast.LENGTH_LONG).show();
    }

    //public MyBinder myBinder ;
    public DownloadService() {
    }

    @Override
    public void onCreate() {
        Log.d(TAG, "onCreate");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        Log.d(TAG, "onDestroy");
        super.onDestroy();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.d(TAG, "onUnbind");
        return super.onUnbind(intent);
    }

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

测试

public class DownloadActivity extends BaseActivity{

    private DownloadService downloadService;
    private ServiceConnection sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadService = ((DownloadService.MyBinder)service).getService();
            try{
                downloadService.startDownload();
            }catch (InterruptedException e){
                e.printStackTrace();
            }

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    } ;
    @Override
    protected void findView() {
        setContentView(R.layout.activity_download);
    }

    @Override
    protected void initView() {

    }

    @Override
    protected void setOnClickListener() {

    }

    @Override
    public void onClick(View v) {

    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent bindIntent = new Intent(this, DownloadService.class);
        this.bindService(bindIntent, sc, BIND_AUTO_CREATE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unbindService(sc);
    }

}

二、Service通过Broadcast与Activity通信

Service 

/**
 * Service通过BroadCast广播与Activity通信
 * sendBroadcast from Service--->Android System--->
 * Receive by broadcastReceiver in Activity
 */
public class BroadcastService extends Service {
    private String TAG ="BroadcastService" ;

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

    public void sendServiceBroadcast() throws InterruptedException{
        Toast.makeText(BroadcastService.this, "download in thread:"+ Thread.currentThread().getName(),
                Toast.LENGTH_SHORT).show();
        Intent intent = new Intent() ;
        intent.setAction("chuiyuan.lsj.androidjava.service.broadcastservice") ;
        intent.putExtra("value", 1000) ;
        sendBroadcast(intent);
        Toast.makeText(BroadcastService.this, "send over", Toast.LENGTH_LONG).show();
    }

    public BroadcastService() {
    }

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

    @Override
    public void onCreate() {
        super.onCreate();
        //如果 是用的startService,可以在这里执行
//        Toast.makeText(this, "onCreate:send broadcast", Toast.LENGTH_SHORT).show();
//        try {
//            sendServiceBroadcast();
//        }catch (InterruptedException e){
//            e.printStackTrace();
//        }

    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "onStartCommand", Toast.LENGTH_SHORT).show();
        return super.onStartCommand(intent, flags, startId);
    }
}

测试

public class ServiceSendbroadcastActivity extends BaseActivity{

    private BroadcastService broadcastService;

    private ServiceConnection sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            broadcastService = ((BroadcastService.MyBinder)service).getService();
            try{
                broadcastService.sendServiceBroadcast();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    } ;

    @Override
    protected void findView() {
        setContentView(R.layout.activity_service_sendbroadccast);
    }

    @Override
    protected void initView() {
        //广播注册
        IntentFilter filter = new IntentFilter() ;
        filter.addAction("chuiyuan.lsj.androidjava.service.broadcastservice");
        registerReceiver(serviceReceiver, filter) ;
    }

    @Override
    protected void setOnClickListener() {

    }

    @Override
    public void onClick(View v) {

    }

    @Override
    protected void onStop() {
        super.onStop();
        unbindService(sc);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent bindIntent = new Intent(this, BroadcastService.class) ;
        bindService(bindIntent, sc, BIND_AUTO_CREATE);
    }

    public BroadcastReceiver serviceReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle extras = intent.getExtras() ;
            if (extras!= null){
                if (extras.containsKey("value")){
                    //这里可以做下载,发包等
                    Toast.makeText(ServiceSendbroadcastActivity.this,
                            "receive broadcast:"+extras.get("value"), Toast.LENGTH_SHORT).show();

                }
            }
        }
    } ;


}

  

  

  

  

Android之Service通信-(2)

标签:

原文地址:http://www.cnblogs.com/chuiyuan/p/4802283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!