有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当手机关机或应用程序被关闭时,java倒计时仍在运行

我正在尝试创建一个倒计时计时器,即使在应用程序关闭或手机关闭时也能运行。例如,假设我运行倒计时计时器从5小时倒计时。当我关掉它时,它会重置为零。我想要它,这样当我从5小时开始倒计时,然后把手机打开一小时,计时器显示剩余时间为4小时。我正在研究服务和多线程技术,但还没有找到适合我的解决方案

In Android i want to run countdown timer who can run in background also

Implementing a Count down timer using Service in the background

以下是我的代码片段:

start_timer.setOnClickListener(new View.OnClickListener() {


    @Override
    public void onClick(View view) {

        new AlertDialog.Builder( MainActivity.this )
                .setMessage( "Are you sure you want to block the selected apps for the set amount of time?" )
                .setPositiveButton( "Yeah man!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d( "AlertDialog", "Positive" );

                        hourint = Integer.valueOf(number_text.getText().toString());

                        minuteint = Integer.valueOf(minute_text.getText().toString());

                        secondint = Integer.valueOf(second_text.getText().toString());

                        Log.i("YourActivity", "Hours: " + hourint);

                        Log.i("YourActivity", "Minutes: " + minuteint);

                        Log.i("YourActivity", "Seconds: " + secondint);

                        totalTimeCountInMilliseconds = ((hourint*60*60) +(minuteint*60) + (secondint)) * 1000;      // time count
                        timeBlinkInMilliseconds = 30*1000;

                        countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) {
                            // 500 means, onTick function will be called at every 500 milliseconds

                            @Override
                            public void onTick(long leftTimeInMilliseconds) {
                                long seconds = leftTimeInMilliseconds / 1000;
                                mSeekArc.setVisibility(View.INVISIBLE);
                                start_timer.setVisibility(View.INVISIBLE);
                                block_button1.setVisibility(View.INVISIBLE);



                                if ( leftTimeInMilliseconds < timeBlinkInMilliseconds ) {
                                    // textViewShowTime.setTextAppearance(getApplicationContext(), R.style.blinkText);
                                    // change the style of the textview .. giving a red alert style

                                    if ( blink ) {
                                        number_text.setVisibility(View.VISIBLE);
                                        minute_text.setVisibility(View.VISIBLE);
                                        second_text.setVisibility(View.VISIBLE);


                                        // if blink is true, textview will be visible
                                    } else {
                                        number_text.setVisibility(View.INVISIBLE);
                                        minute_text.setVisibility(View.INVISIBLE);
                                        second_text.setVisibility(View.INVISIBLE);


                                    }

                                    blink = !blink;         // toggle the value of blink
                                }

                                second_text.setText(String.format("%02d", seconds % 60));
                                minute_text.setText(String.format("%02d", (seconds / 60) % 60));
                                number_text.setText(String.format("%02d", seconds / 3600));                     // format the textview to show the easily readable format
                            }


                            @Override
                            public void onFinish() {
                                // this function will be called when the timecount is finished
                                //textViewShowTime.setText("Time up!");
                                number_text.setVisibility(View.VISIBLE);
                                minute_text.setVisibility(View.VISIBLE);
                                second_text.setVisibility(View.VISIBLE);
                                mSeekArc.setVisibility(View.VISIBLE);
                                start_timer.setVisibility(View.VISIBLE);
                                block_button1.setVisibility(View.VISIBLE);


                            }

                        }.start();
                    }
                })
                .setNegativeButton( "Nope!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d( "AlertDialog", "Negative" );
                        dialog.cancel();
                    }
                } )
                .show();

我该如何实现这一点?我需要对代码进行哪些修改

编辑:这是我的完整代码:

http://pastebin.com/pth9KZWP

编辑2:这里是修改后的代码:

我的应用程序无法启动。我没有收到任何logcat声明,所以我不知道该怎么办

http://pastebin.com/L8HgGtsy


共 (1) 个答案

  1. # 1 楼答案

    输入倒计时时间后,计算倒计时何时结束,并将其写入持久存储器。然后,每当应用程序重新启动时,读取该时间并计算距离现在还有多少时间