BroadcastReceiver получает как 1 из 10 намерений

При нажатии кнопки я открываю действие (ActionListActivity) и отправляю намерение в IntentService (позже эта служба отправляет широковещательное намерение в ActionListActivity). Но я обычно получаю только первое намерение после запуска. Действительно ли намерение отправляется до регистрации получателя?

Я хочу получить данные, предоставленные службой намерений, и с их помощью обновить свой пользовательский интерфейс.

Схема Activity->IntentService->BroadCastReceiver внутри ActionListActivity

Мероприятия:

private void selectDrawerItem(MenuItem menuItem)
    {
        switch (menuItem.getItemId()) {
            case R.id.actions:{
                Intent myIntent = new Intent(this, ActionListActivity.class);
                this.startActivity(myIntent);
                ProgressDialog progressDialog = new ProgressDialog(this);
                progressDialog.show();
                Intent dataIntent = new Intent(this, DatabaseWorkIntentService.class);
                dataIntent.putExtra(Utils.INTENT_SERVICE_INVOKE, Utils.READ_ACTIONS_DATA);
                startService(dataIntent);
                progressDialog.dismiss();
            }
        }
    }

ИнтентСервис:

     private void readActionData(){
            Log.e("read actions data","data");
            List<Action> actionList;
            actionList = Action.listAll(Action.class);

            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction(Utils.READ_ACTIONS_DATA);
            broadcastIntent.putParcelableArrayListExtra(Utils.READ_ACTIONS_DATA, (ArrayList<? extends Parcelable>) actionList);
            sendBroadcast(broadcastIntent);
        }

Активность списка действий:

public class ActionListActivity extends BaseActivity {

    boolean mIsReceiverRegistered = false;
    DataBroadcastReceiver receiver;
    TextView someTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.action_list_activity);
        this.initToolbarAndDrawerWithReadableName(getString(R.string.our_actions));

        someTv = (TextView)findViewById(R.id.someTv);
    }

    public void someTvTest(Action action){
        someTv.append(action.getName());
        Log.e("data",action.getName());
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mIsReceiverRegistered) {
            unregisterReceiver(receiver);
            receiver = null;
            mIsReceiverRegistered = false;
        }
    }

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

        if (!mIsReceiverRegistered) {
            if (receiver == null)
                receiver = new DataBroadcastReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction(Utils.READ_ACTIONS_DATA);
            receiver.setMainActivityHandler(this);
            registerReceiver(receiver, filter);
            mIsReceiverRegistered = true;
        }
    }
}
class DataBroadcastReceiver extends BroadcastReceiver{

    ActionListActivity activity = null;
    ArrayList<Action> list;

    public void setMainActivityHandler(ActionListActivity main){
        activity = main;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("reciever","reciev");
        list = intent.getParcelableArrayListExtra(Utils.READ_ACTIONS_DATA);
        for (Action action:list){
            if(activity!=null) {
                activity.someTvTest(action);
            }
        }
    }
}

person Void    schedule 18.10.2016    source источник
comment
задавая вопрос, наряду с кодом также опишите, чего вы хотите достичь, чтобы другие могли понять, почему вы выбрали способ, которым вы сейчас работаете.   -  person Vivek Mishra    schedule 18.10.2016
comment
@VivekMishra Хорошо, немного изменил вопрос, есть идеи?   -  person Void    schedule 18.10.2016
comment
какая польза от службы намерений?   -  person Vivek Mishra    schedule 18.10.2016
comment
@VivekMishra Чтение некоторых данных из базы данных и отправка их в активность.   -  person Void    schedule 18.10.2016


Ответы (1)


Вы запускаете активность и обслуживание асинхронно. Вам нужно запустить службу внутри ActionListActivity и дождаться ответа.

person Alex Klimashevsky    schedule 18.10.2016
comment
Может я тебя не понимаю. Вы имеете в виду отправить намерение IntentService внутри ActionListActivity& - person Void; 18.10.2016
comment
@Turbozanik да, это единственный способ убедиться, что обратный вызов существует без какого-либо хранилища. - person Alex Klimashevsky; 18.10.2016