私のアプリの1つのアクティビティでは、3秒ごとに変化する画像ビューとテキストビューがあります。Androidの一時停止と再開のバックグラウンドアクティビティ
まず、これをハンドラとスレッド実行可能プログラムで設定します。それはうまく動作しますが、一時停止ボタンでremoveCallbacksを使用すると、スレッドの途中で一時停止しません。一時停止する前にスレッド実行可能ファイルを完了します。実行可能な場所にボタンがクリックされても、一時停止する必要があります。
私はasynctaskを使用することを考えましたが、どのように動作するのか分かりません。
ダウンロードするほとんどすべてのゲームを一時停止できるので、これを行う方法が必要であることは知っています。誰にもこれを行うための最善の/最も簡単な方法に関する提案はありますか?
ありがとうございます! :)
public class Workout extends AppCompatActivity {
private String[] messages = {"1", "2", "3", "4", "5"};
final Handler handler = new Handler();
private int nextIndex;
String mDrawableName[] = {"bodypart70", "equipment70", "settings70", "time70", "bodypart70"};
private int nextImage;
ImageView image;
private ProgressBar progressBar;
private int progressStatus = 0;
Runnable r = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.workout);
image = (ImageView) findViewById(R.id.exerciseImage);
final TextView text = (TextView)findViewById(R.id.textView4);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
//changing
r = new Runnable(){
@Override
public void run(){
if (messages.length > nextIndex) {
//change textview
text.setText(messages[nextIndex++]);
//change image
int resID = getResources().getIdentifier(mDrawableName[nextImage++] , "drawable", getPackageName());
image.setImageResource(resID);
//restart progress bar
progressStatus = 0;
progress();
//do it after 3 seconds
handler.postDelayed(this, 3000);
}
}
};
handler.postDelayed(r, 0);
}
public void progress(){
new Thread(new Runnable() {
public void run() {
long timerEnd = System.currentTimeMillis() + 3 * 1000;
while (timerEnd > System.currentTimeMillis()) {
progressStatus = 3 - (int) (timerEnd - System.currentTimeMillis())/1000;
// Update the progress bar
handler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressStatus);
}
});
try {
Thread.sleep(10);
} catch (InterruptedException e) {
Log.w("App", "Progress thread cannot sleep");
}
}
}
}).start();
}
public void pauseWorkout(View view){
handler.removeCallbacks(r);
}
public void resumeWorkout(View view){
handler.postDelayed(r, 0);
}
}
あなたはヌル(handler.removeCallbacksAndMessagesを試してみました); handler.removeCallbacks(r)の代わりに。 ? –
いいえ、私はしませんでした - 私は自分のコードにアクセスして、後でそれを試してみましょう。提案していただきありがとうございます! – SillyFidget
これらの2つの違いを説明できますか?私はまだ学んでいます。ありがとうございました! – SillyFidget