添加到包而不提取它

add to bundle without extract it

我有两个 class。 class A 和 class B。在classA中,我将一些字符串放入一个bundle对象中,然后将其发送到classB

我的问题在这里: 我可以直接将一些 stringint 放入此捆绑包而不将其提取到 class B 中并向其添加额外信息,然后创建一个新捆绑包。

*********编辑******* 其他场景:

我已经从意图服务发送了一个包到 activity 然后在 activity 我想给这个包添加一些额外的东西,最后我将这个包发送到后台线程以节省 sharePreference .我该怎么做?

是的,你可以做到。所以在你的 Class B 中,当你想打开 Class C 时,你可以从以前的意图中获取包,然后继续添加到同一个包并打开 C

Intent newIntent = new Intent(ActivityB.this, ActivityC.class);
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    bundle.putString("newKey","newValue");
    newIntent.putExtras(bundle);
}
startActivity(newIntent);

更新

因为您想在 BG 线程中传递此 Bundle 并假设您正在使用 AsyncTask,您可以执行以下操作 -

如下声明您的异步任务 -

 class MyBGClass extends AsyncTask<Bundle,Void,Void>{
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }



        @Override
        protected Void doInBackground(Bundle... params) {
            return null;
        }
    }

然后你可以调用它 -

Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    bundle.putString("newKey","newValue");
}
new MyBGClass().execute(bundle);

更新 2: 从您的 resultReceiver 传递数据 -

receiver.send(RESULT_CODE, bundle);

然后在您的 activity 中,您可以将此结果接收器传递给您的服务工具

 @Override
protected void onReceiveResult(int resultCode, Bundle resultData) {

    //resultData is your bundle. to add to it -
    if (resultData != null) {
        resultData.putString("newKey","newValue");
    }
}

然后调用你的BG线程。

像下面这样更改 WorkerThread class 的构造函数,并在创建 class-

的对象时将 bundle 传递给线程
private class WorkerThread extends HandlerThread {
    private static final int SAVE = 1;
    PreferenceModel instancePreferenceModel;
    Bundle bundle;
    private Handler mHandler;
    public WorkerThread(Bundle bundle) {
        super("WorkerThread", Process.THREAD_PRIORITY_BACKGROUND);
        App app = (App) getApplication();
        this.bundle = bundle;
        instancePreferenceModel = app.getInstancePreferenceModel();
    }

    @Override
    protected void onLooperPrepared() {
        super.onLooperPrepared();

        mHandler = new Handler(getLooper()) {

            @Override // receive message from uiThread as Bundle object.
            public void handleMessage(Message msg) {

                switch (msg.what) {

                    case SAVE:
                        Log.i(TAG, "handleMessage: saved completed");
                        Bundle data = (Bundle) msg.obj;
                        Log.i(TAG, "getData: " + data.getString(LoginIntentService.EXTRA_FIRST_NAME));
                        instancePreferenceModel.saveUserInfo(data);
                        break;
                }

            }

        };

    }

    // this method is access to main ui thread.by this method UiThread can send a Message
    // Background Thread
    public void write(Bundle b) {
        Message msg = new Message();
        msg.obj = b;
        Message obtain = Message.obtain(mHandler, SAVE, msg.obj);
        mHandler.sendMessage(obtain);
    }

}