Hallo, ich mache ein Quiz-Spiel, und ich habe ein Problem, ich werde versuchen, auf eine einfachere Weise unten zu beschreiben.Ich habe eine Frage und 4 Tasten jeder eine Antwort darstellt.Wenn ich klicke auf eine antwort Ich möchte mit der gewählten Taste die Farbe für 2 Sekunden in Orange ändern und wird dann grün, wenn die Antwort richtig ist und rot, wenn die Antwort falsch ist und die richtige Antwort auch grün wird und für weitere 2 Sekunden in dieser Situation bleibt bringen Sie die neue Frage und alle Knöpfe nehmen ihre vorherige (defaut) Farbe.Stoppen Sie die Ausführung für einen Zeitraum von Zeit in Java
Ich habe viele Möglichkeiten wie TimeUnit.SECONDS.sleep(2);
, Thread.sleep(2000);
und einige mehr versucht, aber die Änderungen erscheint nach dieser Zeit.Wenn ich jetzt und für die nächsten 2 Sekunden erscheint.
Last Weise habe ich versucht, ist ein Zeitgeber wie folgt aus:
long startTime = System.currentTimeMillis();
long endTime = startTime + 2*1000; // 2 seconds * 1000 ms/sec
while (System.currentTimeMillis() < endTime)
{
}
für 2 Sekunden, um die Ausführung in der while-Schleife zu stoppen. Ich machte eine einfachere Anwendung mit einer Taste, um das Problem im Forum zu beschreiben. Ich will, wenn ich auf den Knopf klicke, ändert sich die Farbe der Taste für 2 Sekunden zu Rot und nahm dann die vorherige Farbe wieder. Hier ist der Java-Code:
package com.example.sakis.fillbutton;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but=(Button)findViewById(R.id.button);
but.setBackgroundResource(R.drawable.colorbut);
}
public void ClickButton(View view) {
but.setBackgroundResource(R.drawable.initcolor);
long startTime = System.currentTimeMillis();
long endTime = startTime + 2*1000; // 2 seconds * 1000 ms/sec
while (System.currentTimeMillis() < endTime)
{
}
but.setBackgroundResource(R.drawable.colorbut);
}
}
Hier ist der XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.sakis.fillbutton.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:layout_marginTop="88dp"
android:onClick="ClickButton"
style="@style/ButtonAnswer"/>
Bitte helfen.
Die Antwort ist offensichtlich richtig, würde aber durch eine Erklärung verbessert, warum belegte Schleifen schlecht sind. – nhouser9
https://en.wikipedia.org/wiki/Busy_waiting "Im Allgemeinen wird das Drehen jedoch als Anti-Pattern betrachtet und sollte vermieden werden, da die Prozessorzeit, die zur Ausführung einer anderen Aufgabe verwendet werden könnte, stattdessen für nutzlose Aktivitäten verschwendet wird. " –
Danke Mann, es funktioniert !!! –