С небольшими изменениями в вашем коде вы можете достичь этого более общим способом.
final Handler responseHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
//txtView.setText((String) msg.obj);
Toast.makeText(MainActivity.this,
"Result from UIHandlerThread:"+(int)msg.obj,
Toast.LENGTH_LONG)
.show();
}
};
HandlerThread handlerThread = new HandlerThread("UIHandlerThread"){
public void run(){
Integer a = 2;
Message msg = new Message();
msg.obj = a;
responseHandler.sendMessage(msg);
System.out.println(a);
}
};
handlerThread.start();
Решение:
Handler
в потоке пользовательского интерфейса , который называется responseHandler
Handler
из Looper
раздела UI Thread. HandlerThread
сообщение post на этом responseHandler
handleMessgae
показывает Toast
со значением, полученным от сообщения. Этот объект сообщения является общим и вы можете отправлять разные типы атрибутов. При таком подходе вы можете отправить несколько значений в поток пользовательского интерфейса в разное время. Вы можете запустить (отправить) много Runnable
объектов на этом HandlerThread
, и каждый Runnable
может установить значение в объекте Message
, которое может быть получено в потоке пользовательского интерфейса.
Время выполнения label_image.py
также включает загрузку модели классификации, ее десериализацию и загрузку вашего изображения. В производственной среде вам нужна система очередей сообщений, из которой ваш сценарий классификации будет читать и записывать. Вы можете создать его с помощью Redis. Этот конвейер уменьшит накладные расходы ввода-вывода, и у вас будет разумное время классификации. Вы можете увидеть пример здесь