Проблемы с отправкой сообщения через .sentToTarget (), msg.arg1 неверно - PullRequest
0 голосов
/ 03 июля 2019

У меня есть один поток, который получает данные и отправляет эти данные через senToTarget() в обработчик.

Когда я получаю сообщение, значение arg1 неверно или не похоже на исходное значение.

Я думал, что это потому, что мне нужно много работать в моем приложении или потому что я отправляю два сообщения за другим.

Является ли sendToTarget() Threadsafe? или я должен использовать mhandler.sendMessage() вместо?

Куда отправляется сообщение

if(iD1_remainingCurrentDrivingTime <= 270) {
    Message mRemainingCurrentDrivingTime = Message.obtain(MainActivity.c_handlerThread_updateFragments.getHandler());
    mRemainingCurrentDrivingTime.what=DRIVER1_FragmentMain_DrivingTime;
    mRemainingCurrentDrivingTime.arg1=iD1_remainingCurrentDrivingTime;
    try{
        mRemainingCurrentDrivingTime.sendToTarget();
        Log.d(TAG, "getVDO1: Send");
    } catch (NullPointerException e) {
        ;
    }
}

Message mRemainingDurationOfCurrentBreakRest = Message.obtain(MainActivity.c_handlerThread_updateFragments.getHandler());

mRemainingDurationOfCurrentBreakRest.what= DRIVER1_FragmentMain_NextRestTime;
mRemainingDurationOfCurrentBreakRest.arg1= iD1_remainingDurationOfCurrentBreakRest;
try{
    mRemainingDurationOfCurrentBreakRest.sendToTarget();
}catch (NullPointerException e) {
}

Где они получены:

@SuppressLint("HandlerLeak")
    @Override
    protected void onLooperPrepared() {
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if(cGlobal_values.b_MainActivity_active && !cGlobal_values.bBT_Popup_active){
                    int currentFragment=CurrentFragment();
                    final int arg1 = msg.arg1;
                    Log.d(TAG, "run: msg.arg1: " +arg1);
                    switch (msg.what){
                        case (DRIVER1_FragmentMain_DrivingTime):
                            if(currentFragment == Driver1_FragmentMain)
                            {
                                //Log.d(TAG, "handleMessage: Update PB1");
                                fragment_Driver1.getActivity().runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Log.d(TAG, "run: msg.arg1: " +arg1);
                                        cf_Fragment_MainDriver1.updateDrivingTime(arg1);
                                    }
                                });
                            }
                            break;
//other Cases
...