Согласно обработчику javadoc , я не думаю, что метод post()
создает какие-либо потоки. Если я прав, то выполните Runnable
в потоке, к которому прикреплен обработчик. Так что в этом случае это поток активности, поэтому поток пользовательского интерфейса! Вот почему у вас низкая производительность.
Вы должны реализовать Thread
, который выполняет ваш Runnable
. Но, сделав это, вы не сможете обновить свою активность, как в настоящее время, позвонив по номеру:
responseHandler.onProductsResponse(products);
Это потому, что вы больше не участвуете в потоке пользовательского интерфейса, и только поток пользовательского интерфейса имеет право взаимодействовать с пользовательским интерфейсом (таким образом, действием).
Таким образом, вы должны заменить этот вызов, получив доступ к Handler
.
Message msg = handler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putSerializable( "products", products ); //not sure it will pass here
msg.setData( bundle );
handler.sendMessage( msg );
И реализация метода handleMessage()
для вашего Handler
:
@Override
public void handleMessage( Message msg )
{
List <Product> products = msg.getData().getSerializable( "products" );
responseHandler.onProductsResponse(products);
}
Последнее, но не менее важное: Handler
все еще должен быть создан в цепочке действий.