TimerTask表现得像运行两次或更多次

时间:2018-03-27 22:46:17

标签: java android timertask

我正在尝试制作一个多人(2人)回合制游戏,让用户可以在60秒内完成他们想要的任何事情。已将TimerTimerTask添加到我的项目中。当第一次玩的时候一切都很好,但是当我回到主屏幕(之前的意图)时,像退出游戏按钮和重新进入游戏计数器似乎运行两次。它不像60-59-58,而是像60-58-55-53,依此类推。退出游戏时我应该做些什么来阻止反击吗?

这是我的代码:

public class ikinciekren extends AppCompatActivity{

    ....

    @Override
    public void onBackPressed()
    {
        ...
        ...
        cikisonay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                kullanici.status(mDatabase,"lose");
                Intent intocan = new Intent(ikinciekren.this, MainActivity.class);
                intocan.putExtra("firebaseuser", facebookname);
                intocan.putExtra("firebaseuid", myuid);
                if(runstatus){
                    myTimer.cancel();
                    myTimer.purge();
                }
                startActivity(intocan);
            }
        });
        cikisiptal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        dialog.show();
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {


        ...
        ...
        // On button click opponents timer starts to run
        btn = (Button)findViewById(R.id.button2);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                TextView number = (TextView) findViewById(R.id.textView4);
                String number2 = number.getText().toString();
                if(number2!=null ||number2!=""){
                    if (number2.length()==4) {
                        status =false;
                        resetSomeTimer();
                        launchSomeTimer();
                        ...
                        ...
                    }
                }
            }


        });
        ...
        ...
        ValueEventListener postListener2 = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot != null && dataSnapshot.getValue() != null) {
                    String turn = String.valueOf(dataSnapshot.getValue());
                    //Read a node in firebase database and acts according to that
                    if ("true".equals(turn)) {
                        status =true;
                    }                        
                    if ("false".equals(turn)) {
                        status =false;
                    }
                    resetSomeTimer();
                    launchSomeTimer();
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                Context context = getApplicationContext();
                Toast.makeText(context, "Failed to load post.",
                        Toast.LENGTH_SHORT).show();
            }
        };
        ...
        ...
    }
    protected void onDestroy(){
        super.onDestroy();
        ///// added this just incase 
        if(runstatus){
            myTimer.cancel();
            myTimer.purge();
        }
        kullanici.status(mDatabase,"off");
        finish();
    }
    public void cikis(View view) {
        if(view.getId()==R.id.button3){
            ...
            ...
            cikisonay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ...
                    ...
                    ...
                    ///// added this just incase 
                    if(runstatus){
                        myTimer.cancel();
                        myTimer.purge();
                    }
                    startActivity(intocan);
                }
            });
            cikisiptal.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
            ...
        }
    }
    private void launchSomeTimer() {
        runstatus=true;
        oppenenttimertext.setText("60");
        owntimertext.setText("60");
        sayac =60;
        counter = new TimerTask() {
            @Override
            public void run () {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run () {
                        sayac--;
                        if (status) {
                            owntimertext.setText(String.valueOf(sayac));
                        } else {
                            oppenenttimertext.setText(String.valueOf(sayac));
                        }
                        if (sayac == 0) {
                            myTimer.cancel();
                            kullanici.timenotice(mDatabase);
                        }
                    }
                });
            }
        };
        myTimer = new Timer();
        myTimer.schedule(counter,1000,1000);

    }
    public void resetSomeTimer(){
        if(runstatus){
            myTimer.cancel();
            myTimer.purge();
        }
    }
}

0 个答案:

没有答案