У меня есть один поток, который получает данные и отправляет эти данные через 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