0

x 分後に開いたアクティビティを閉じる最も簡単な方法を探しています。Androidはカウントダウンクラスを提供していますか、それとも自分で作成する必要がありますか?

このコードを試しましたが、機能しません

Thread isOnDisplayThread = new Thread(new Runnable() {
            @Override
            public void run() {
                Timer mTimer = new Timer();
                mTimer.schedule(new TimerTask() {    
                    @Override
                    public void run() {
                        Log.d(TAG, (isApplicationOnDisplay) ? "Application on display" : "APPLICATION ON BACKGROUND");

                        if (!isApplicationOnDisplay) {
                            notOnDisplayTime++;
                            if (notOnDisplayTime >= 10) {

                                Process.killProcess(Process.myPid());
                            }
                        } else {
                            notOnDisplayTime = 0;
                        }
                    }
                }, 0, 1000);
            }
        });

        isOnDisplayThread.run();
4

7 に答える 7

5
Handler handler = new Handler();
    Runnable r=new Runnable() {
              @Override
              public void run() {
                finish();
              }         
            };
        handler.postDelayed(r, 2000); 
于 2013-04-16T11:04:34.103 に答える
4

run()Javaのメソッドを呼び出すことは決してありませんThread。そのstart()メソッドを呼び出します。これにより、Javaは新しいスレッド内でrun()そのメソッドを呼び出します。

于 2013-04-16T11:01:50.780 に答える
3

悪いアイデア:

Process.killProcess(Process.myPid());

UI スレッドで finish() 関数を呼び出す必要があります。たとえば、runOnUiThread():リンクを使用します。

于 2013-04-16T11:01:47.050 に答える
2

run メソッドを呼び出しているため、機能していません。スレッドを開始しません。そのため、start メソッドを呼び出してスレッドを呼び出す必要があります。

  isOnDisplayThread.start();

また、スレッドを終了するには、

        finish() ///method of the Activity class

コードが Activity クラスにある場合は、finish() メソッドを呼び出すだけです

    if (notOnDisplayTime >= 10) {

            finish();
    }
于 2013-04-16T11:03:59.277 に答える
2
private final long startTime = 200000;
private final long interval = 1000;
countDownTimer = new MalibuCountDownTimer(startTime, interval);
    countDownTimer.start();
public class MalibuCountDownTimer extends CountDownTimer{
        public MalibuCountDownTimer(long startTime, long interval){
            super(startTime, interval);
        }
            @Override
            public void onFinish(){
                txttimer.setText("Time's up!");                 
                    //timeElapsedView.setText("Time Elapsed: " + String.valueOf(startTime));
            }
            @Override
            public void onTick(long millisUntilFinished) {
                    //text.setText("Time remain:" + millisUntilFinished);
                    //timeElapsed = startTime - millisUntilFinished;
                    String format = String.format("%%0%dd",2);  
                    String seconds = String.format(format, millisUntilFinished/1000 % 60);  
                     String minutes = String.format(format, (millisUntilFinished /(1000*60))%60);  
                     String hours = String.format(format, (millisUntilFinished /(1000*60*60))%24);  
                     String time =  hours + ":" + minutes + ":" + seconds;  
                     txttimer.setText("Time Remaining:" + time);
                            TimeUnit.MILLISECONDS.toMinutes(timeElapsed) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeElapsed)),
                            TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeElapsed)));
                    System.out.println(hms);
                    //text.setText("Time remain:" + h+":"+m+":"+s);
                    //timeElapsedView.setText("Time Elapsed: " + String.valueOf(timeElapsed));   
                }
        }
于 2013-04-16T11:14:08.093 に答える
1

Handler.postDelayedメソッドを使用するだけです。

于 2013-04-16T11:04:19.477 に答える