@Azik28

Как обновить UI после того как пользователь покинул приложение в Андроид?

Есть IntentService, который работает в бэкграунде. После того как он завершает работу, результат отправляется в виде BroadcastManager на Main Activity, где он обновляет UI Main activity.
Но проблема в том что, когда пользователь выходит из приложения, то сообщение (в виде Intent) хоть и принимается BroadcastReceiver-ом, но когда пользователь обратно заходит в приложение, он не видит этого сообщения, в смысле обновленного UI, потому что запускается метод onCreate, который представляет Activity в исходном виде, т.е. UI не обновляется, хотя IntentService работает как надо.
Как можно сохранить текущее состояние Main Activity для пользователя и показать результат после повторного открытия приложения? Код MainActivity.java:
public class MainActivity extends ActionBarActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageFromCamera = (ImageView) findViewById(R.id.imageView1);
        ocrTextView = (EditText) findViewById(R.id.ocrText);

        //set an Intent Filter
        IntentFilter statusIntentFilter = new IntentFilter(ServiceBackground.Constants.BROADCAST_ACTION);
        receiver = new ResponseReceiver();

        LocalBroadcastManager.getInstance(this).registerReceiver(receiver,statusIntentFilter);
   }
   
private class ResponseReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction() != null && intent.getAction().equals(ServiceBackground.Constants.BROADCAST_ACTION)) {
                System.out.println(intent.getAction());
                final Bitmap imageRetrieved = intent.getParcelableExtra("bitmap");
                String responseRetrieved = intent.getStringExtra("response");
                imageFromCamera.setImageBitmap(imageRetrieved);
                ocrTextView.setText(responseRetrieved);

            }

    }
}


Код ServiceBackgound.java:
public class ServiceBackground extends IntentService {
    public ServiceBackground() {
        super("My_Worker_Thread");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        Toast.makeText(this, "Service started", Toast.LENGTH_LONG).show();

        Uri originalUri = intent.getData();

        String absolutePathToImage = UriToPathActivity.getRealPathFromUri(getApplicationContext(),id);
        final Bitmap bitmap = BitmapFactory.decodeFile(absolutePathToImage, bmOptions);
 

        Intent localIntent = new Intent(Constants.BROADCAST_ACTION);
        //bitmap responseReceivedполучены некоторой логикой
        localIntent.putExtra("bitmap", bitmap);
        localIntent.putExtra("response", responseReceived);

        LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);

    }
}
  • Вопрос задан
  • 318 просмотров
Пригласить эксперта
Ответы на вопрос 1
@onepavel
Консультация и разработка мобильных приложений
Сохраняйте состояние в PreferenceManager, в onCreate проверяйте состояние и соответственно изменяйте UI
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы