Я хочу сделать секундомер. И я создаю такой класс секундомера. И когда я вызываю onPause в другое действие, это приложение для замораживания.Android onPause thread freeze application
public class StopWatch implements Runnable {
private Object mPauseLock;
private boolean mPaused;
private boolean mFinished;
private ArrayList<TextView> textFields;
private Handler mHandler = new Handler();
public StopWatch(ArrayList<TextView> textFields) {
mPauseLock = new Object();
mPaused = false;
mFinished = false;
this.textFields =textFields;
}
public void run() {
textFields.get(1).setText("progressing...");
if (!mPaused) {
mHandler.postDelayed(this, 1000);
}
synchronized (mPauseLock) {
while (mPaused) {
try {
mPauseLock.wait();
} catch (InterruptedException e) {
}
}
}
}
public void onPause() {
synchronized (mPauseLock) {
mPaused = true;
}
}
public void onResume() {
synchronized (mPauseLock) {
mPaused = false;
mPauseLock.notifyAll();
}
}
}
и я создать экземпляр класса в другой вид, подобный. Может ли кто-нибудь объяснить мне, где проблема?
stopky = new StopWatch(textFields);
stopky.run();
// do another stuff and register buttons with onClickListener and call
stopky.onPause(); // freeze application
stopky.onResume();
как я могу это сделать? Как я должен модифицировать код? –
Можете ли вы показать мне какой-нибудь простой пример? –
Кстати, поскольку вы отметили свой Q «многопоточным»: просто потому, что у вас есть «Runnable», это не значит, что вы выполняете многопоточность. На самом деле, вы этого не делаете. Это означает, что вы можете полностью удалить синхронизацию. –