2
public class TestingActivity extends Activity implements View.OnClickListener
{
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);

ScheduledFuture now = null;
public void onCreate(Bundle savedInstanceState)
{
    //oncreate
}
public void rollthedice()
{
//rollthedice
}


 public void onClick(View view)
{

    Runnable runner = new Runnable()
    {
        public void run()
        {
            rollthedice();
        }
    };


    if(view.equals(continuous))
    {
    if(now == null)
        now = scheduler.scheduleAtFixedRate(runner, 0, 250, TimeUnit.MILLISECONDS);
    else
        return;
    }
    if(view.equals(stop))
    {
        if(now != null)
        {
            now.cancel(true);
            now = null;
        }

        else
            return;
    }
    if(view.equals(roll))
        rollthedice();
    if(view.equals(exit))
        System.exit(0);
}

私はそれをJavaアプリケーションで使用しましたが、正常に動作しました。Androidプロジェクトに入れましたが、動作しません。連続ボタンでrollthedice()を継続的に実行し、停止ボタンで停止してから、継続して再起動して停止します。前方へ

4

3 に答える 3

1

フラグ付きのwhileループを追加する必要があるため、次のことを試してください。

public void run()
{
while (runningFlag){
//do something here
}
}

開始時にフラグをtrueに設定してからスレッドを開始する必要があり、停止する場合はフラグをfalseに設定します。

于 2012-11-04T22:22:41.893 に答える
1

onCLickが実行されてもよろしいですか?呼びましたか

continuous.setOnClickListener(this);
stop.setOnClickListener(this);

等?

于 2012-11-04T22:23:45.970 に答える
1

whileループを作成し、条件をtrueに設定して停止することができます(!のため)。また、別のスレッドでローリングすることを強く検討する必要があります。必要な場合は、ハンドラーが必要な場合と不要な場合があります。

boolean mPaused = false;

while(!mPaused) {
    doSomething();
}

//to stop it set mPaused = true
//to resume call the method again

ハンドラ

//called by
Message msg0 = new Message();
msg0.obj = "someting";
handler.sendMessage(msg0);

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.obj.equals("something")) {
            doSomething();
        }
    }
};
于 2012-11-05T00:32:10.453 に答える