У меня есть простая игра-головоломка для Android, которая в настоящее время работает на одном потоке. Мне было поручено разработать игру, чтобы включить многопоточность, но у меня проблемы с поиском достаточно простого учебника, чтобы вести меня через него. Я играю гладко в настоящий момент, у него есть классы MainActivity, GameView, GameLogic и SpriteObject, так как вы почти наверняка ожидаете, что они будут делать их имена. Как и где бы я реализовал другой поток, который на данный момент просто увеличивал внешнюю переменную, так сказать "таймер" так часто?
Пожалуйста, учтите, что я изо всех сил пытался остричь голову, чтобы вы могли позаботиться о том, чтобы я ее получил.
благодаря
Android имеет класс AsyncTask, который довольно изящный :)
Просто создайте класс, который расширяет его следующим образом:
public class myTask extends AsyncTask<Object, Object, Object> {
@Override
protected Object doInBackground(Object... arg0) {
//Increase timer and wait here in a loop
return null;
}
protected void onPostExecute(Object result) {
//Something you want to do when done?
};
}
Для начала просто позвоните
new myTask().execute(INPUT or null);
Часть - это тип класса ваших параметров для выполнения, тип класса объекта, который может использоваться для обновления визуального прогресса, и значение, которое возвращает doInBackground и onPostExecute, соответственно.
Перейдите по ссылке: http://android-developers.blogspot.com/2009/05/painless-threading.html
И документация: http://developer.android.com/reference/android/os/AsyncTask.html
поэтому, если его просто делать что-то периодически просто использовать планировщик/Таймер не нужно создавать новый поток
import java.util.concurrent.ScheduledFuture;
private void startUpdateTimer(){
final Runnable updater = new Runnable() {
@Override
public void run() {
try {
updateTheActualVariable();
} catch (Exception ex) {
Log.e("error in getting updates", ex.getMessage());
}
}
};
final ScheduledFuture updaterHandle = sheduler.scheduleAtFixedRate(updater, 0, Constants.GET_UPDATES_PERIOD, TimeUnit.SECONDS);
}
Подробнее здесь http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
Вы также можете использовать старый старый java-таймер http://developer.android.com/reference/java/util/Timer.html
volatile
или какой-то атомарной.