android开发分享在Android中使用ResultReceiver

从根本上说,我想build立一个IntentService的Activity的callback。 我的问题和这里回答的非常相似:

Restful API服务

但是,在答案代码中,活动代码被视为实施ResultReceiver。 除非我失去了一些东西,ResultReceiver实际上是一个类,所以它不能执行这个实现。

所以基本上,我问什么是将ResultReceiver连接到该服务的正确方法。 在这方面,我对Handler和ResultReceiver的概念感到困惑。 任何工作示例代码将不胜感激。

    在你的activity中实现Myresultreceiver.receiver接口,创build一个类variables

     Public MyResultReceiver mReceiver; 

    在onCreate中初始化这个variables:

     mReceiver = new MyResultReceiver(new Handler()); mReceiver.setReceiver(this); 

    通过以下方式将此mReceiver传递给intentService:

     intent.putExtra("receiverTag", mReceiver); 

    并像IntentService一样获取:

     ResultReceiver rec = intent.getParcelableExtra("receiverTag"); 

    并使用rec发送任何活动作为:

     Bundle b=new Bundle(); rec.send(0, b); 

    这将在onReceiveResult的活动中收到。 您可以在以下位置查看完整的代码: IntentService:将数据提供给Activity

    编辑:你应该在onResume和setReceiver(null)onPause()中调用setReceiver(this)以避免泄漏。

    你通过子类重写一个方法。 它不一定是一个接口来做到这一点。

    例如:

     intent.putExtra(StockService.REQUEST_RECEIVER_EXTRA, new ResultReceiver(null) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { if (resultCode == StockService.RESULT_ID_QUOTE) { ... } } }); 

    我创build了一个演示如何使用ResultReceiver的简单示例。

    主要活动

     public class MainActivity extends AppCompatActivity { private final static String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent serviceIntent = new Intent(this, MyService.class); serviceIntent.putExtra("logName", "MAIN_ACTIVITY"); serviceIntent.putExtra(MyService.BUNDLED_LISTENER, new ResultReceiver(new Handler()) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode, resultData); if (resultCode == Activity.RESULT_OK) { String val = resultData.getString("value"); Log.i(TAG, "++++++++++++RESULT_OK+++++++++++ [" + val + "]"); } else { Log.i(TAG, "+++++++++++++RESULT_NOT_OK++++++++++++"); } } }); startService(serviceIntent); } } 

    我的服务

     public class MyService extends Service { private final static String TAG = MyService.class.getSimpleName(); public final static String BUNDLED_LISTENER = "listener"; @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String logName = intent.getStringExtra("logName"); ResultReceiver receiver = intent.getParcelableExtra(MyService.BUNDLED_LISTENER); Bundle bundle = new Bundle(); bundle.putString("value", "30"); receiver.send(Activity.RESULT_OK, bundle); return Service.START_NOT_STICKY; } @Nullable @Override public IBinder onBind(Intent intent) { return null; } } 

    我现在要用EventBus做

    在Android中使用Resulteceiver

    3.在某些接收器中使用某个接收器

    6.在MyActivity类和setreceiver中实现someResultReceiver

    有关更多详细信息ResultReceiver类请参阅此处input链接描述

      以上就是android开发分享在Android中使用ResultReceiver相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520204.html

      (0)
      上一篇 2020年12月6日
      下一篇 2020年12月6日

      精彩推荐