魅力程序猿

  • 首页
  • Java
  • Android
  • APP
    • 扑克计分器
    • Video Wallpaper
  • 联系我
  • 关于我
  • 资助
道子
向阳而生
  1. 首页
  2. Android
  3. 正文

Android Service与Activity通信之ResultReceiver

2016年2月4日 7334点热度 0人点赞 1条评论

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);
    }
}

效果:

device-2016-02-04-164726 device-2016-02-04-164827device-2016-02-04-165023
标签: ResultReceiver Service与Activity通信
最后更新:2016年2月4日

daozi

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • Janisa

    That's a clever answer to a tricky quseiton

    2016年12月18日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复
    搜索
    联系方式

    QQ群:179730949
    QQ群:114559024
    欢迎您加入Android大家庭
    本人QQ:136049925

    赐我一丝安慰
    给我一点鼓励

    COPYRIGHT © 2023 魅力程序猿. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    豫ICP备15000477号