napisz sobie klasę upraszczającą całą procedurę przykładowo taką:
public abstract class Interface<Relay> {
private final InternalHandler mHandler = new InternalHandler();
public void sendForground(int what, Relay relay) {
Message message = mHandler.obtainMessage(what, relay);
message.sendToTarget();
}
private class InternalHandler extends Handler {
@Override
@SuppressWarnings("unchecked")
public void handleMessage(Message message) {
forground(message.what, (Relay) message.obj);
}
}
protected abstract void forground(int what, Relay relay);
}
teraz jak chcesz coś wykonać z watka co wpływa na elementy w wątku UI wystarczy ze zrobisz klasę rozszerzającą potem tworzysz obiekt i używasz
private final InternalInterface mInternalInterface = new InternalInterface();
private class InternalInterface extends Interface<String> {
@Override
protected void forground(int what, String string) {
//to się wykona w wątku UI
}
}
mInternalInterface.sendForground(1, "coś");//to wykonujesz w wątku nie UI
można zdefiniować dowolny rodzaj danych do przekazania lub Void jak nic nie chcemy przekazać a jedynie wykonać
pewnie zaraz ktoś to napisze więc dodam ja, można tez użyć runOnUiThread() albo zamiast Thread AsyncTask