Есть 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);
}
}