Почему бы фоновый поток порождать свой собственный обработчик & Looper просто изменить компонент пользовательского интерфейса в .Я знаю, что в простых условиях:Почему бы породить фоновый поток свой собственный Handler & Looper
Looper: Loop и выполнить задачи в очереди сообщений
Handler: размещение задач в очереди
Взгляните на этот фрагмент кода я взял из статьи в интернете
public class MyActivityV2 extends Activity {
private Handler mUiHandler = new Handler();
private MyWorkerThread mWorkerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWorkerThread = new MyWorkerThread("myWorkerThread");
Runnable task = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"I am at the middle of background task",
Toast.LENGTH_LONG)
.show();
}
});
}
}
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
}
});
}
};
// MyWorkerThread == HandlerThread
mWorkerThread.start();
mWorkerThread.prepareHandler();
// 2 starting of thread
mWorkerThread.postTask(task);
mWorkerThread.postTask(task);
}
@Override
protected void onDestroy() {
mWorkerThread.quit();
super.onDestroy();
}
}
//MyWorkerThread.java
class MyWorkerThread extends HandlerThread {
private Handler mWorkerHandler;
public MyWorkerThread(String name) {
super(name);
}
public void postTask(Runnable task){
mWorkerHandler.post(task);
}
public void prepareHandler(){
mWorkerHandler = new Handler(getLooper());
}
}
Это либо я полностью недопонимаю код, либо недостаток основы нитей в Android. Так что я сожалею.
Фоновая нить в основном повторяется (дважды). Основная идея - манипулировать компонентом пользовательского интерфейса через фоновый поток.
Посмотрите на это:
mWorkerHandler
Почему бы фоновый поток создать свой собственный обработчик, если его вопрос компонента манипуляции UI, то почему не так просто взять ссылку на обработчик UI потока и проводка выполняется через обработчик.
и
mWorkerHandler = new Handler(getLooper());
, который создает свой собственный петлитель (петлителя фоне потока), который указывает, что фоновый поток создает свою очередь сообщений. Разве это не должно быть просто для игры в очереди сообщений основного потока, а не в фоновом потоке.
Заранее спасибо.
Что на самом деле вы хотите достичь? – pskink
Я имею в виду, почему код не берет ссылку на обработчик потока пользовательского интерфейса, так что с петлеукладчиком, почему фоновый поток создавал бы свой собственный петлеар, чтобы модифицировать очередь сообщений в потоке пользовательского интерфейса? –
ОК, вы хотите обновить интерфейс от нелицензионного потока или что? – pskink