android service通讯,Android Service与Activity通信之ResultReceiver

Service与Activity之间通信除了,通过Binder对象、Broadcast,还有ResultReceiver,使用起来你会觉得非常好用。

下面我写一个小例子:

ActivityResultReceiver.java

package com.ixiaoyu.demo.ui.activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.support.v4.os.ResultReceiver;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import com.ixiaoyu.demo.R;

import com.ixiaoyu.demo.ui.service.ServiceResultReceiver;

/**

* Created by yuzhenbei on 2016/2/4.

*/

public class ActivityResultReceiver extends AppCompatActivity implements View.OnClickListener{

/** */

private Button mBtnStartService;

/** */

private TextView mTxtResult;

/** */

private ResultReceiver mResultReceiver;

/** */

public static String KEY_RESULT_RECEIVER = "KEY_RESULT_RECEIVER";

/** */

public static String KEY_NUM_1 = "KEY_NUM_1";

/** */

public static String KEY_NUM_2 = "KEY_NUM_2";

/** */

public static String KEY_RESULT = "KEY_RESULT";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_result_receiver);

//初始化

initView();

//InitResultReceiver

initResultReceiver();

}

/**

* 初始化

*/

private void initView() {

mBtnStartService = (Button)findViewById(R.id.btn_open_service);

mBtnStartService.setOnClickListener(this);

mTxtResult = (TextView)findViewById(R.id.txt_result);

}

/**

* set

*/

private void initResultReceiver(){

mResultReceiver = new ResultReceiver(new Handler()){

@Override

protected void onReceiveResult(int resultCode, Bundle resultData) {

super.onReceiveResult(resultCode, resultData);

if (null != resultData){

int _Result = resultData.getInt(KEY_RESULT);

mTxtResult.setText("收到:" + _Result);

}

}

};

}

@Override

protected void onResume() {

super.onResume();

}

@Override

protected void onPause() {

super.onPause();

}

@Override

public void onClick(View v) {

switch (v.getId()){

case R.id.btn_open_service:

Intent _Intent = new Intent();

_Intent.putExtra(KEY_RESULT_RECEIVER, mResultReceiver);

_Intent.putExtra(KEY_NUM_1, 6);

_Intent.putExtra(KEY_NUM_2, 9);

_Intent.setClass(this, ServiceResultReceiver.class);

startService(_Intent);

break;

}

}

}

ServiceResultReceiver.java

package com.ixiaoyu.demo.ui.service;

import android.app.Activity;

import android.app.IntentService;

import android.content.Intent;

import android.os.Bundle;

import android.support.v4.os.ResultReceiver;

import com.ixiaoyu.demo.ui.activity.ActivityResultReceiver;

/**

* Created by yuzhenbei on 2016/2/4.

*/

public class ServiceResultReceiver extends IntentService{

/** TAG */

private static final String TAG = ServiceResultReceiver.class.getSimpleName();

/** Used to name the worker thread */

public static final String WORKER_NAME = TAG + "Worker_Thread";

public ServiceResultReceiver() {

super(WORKER_NAME);

}

@Override

protected void onHandleIntent(Intent intent) {

ResultReceiver _rec = intent.getParcelableExtra(ActivityResultReceiver.KEY_RESULT_RECEIVER);

int _num1 = intent.getIntExtra(ActivityResultReceiver.KEY_NUM_1, 0);

int _num2 = intent.getIntExtra(ActivityResultReceiver.KEY_NUM_2, 0);

int _result = _num1 + _num2;

Bundle _b = new Bundle();

_b.putInt(ActivityResultReceiver.KEY_RESULT, _result);

_rec.send(Activity.RESULT_OK, _b);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

_result = _num1 * _num2;

_b.putInt(ActivityResultReceiver.KEY_RESULT, _result);

_rec.send(Activity.RESULT_OK, _b);

}

}

效果:

88b2802111f899e988a84099907e5d21.png

d5d595b5560e0d611ad59a3a43928b55.png

97fb8e594e916553b4d51faf864540ec.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值