如何在显示2个数字之间实现延迟

时间:2013-03-10 04:51:58

标签: android

我使用eclipse IDE在android中显示带有文本视图的数字。我必须在每个号码后实施2分钟的延迟。我怎样才能做到这一点? 这是我的代码:

    int counter1 = 0;
    String stringVal;
    TextView textview1;

    textview1 = (TextView) findViewById(R.id.textView1);

    while (counter1 < 10) {
         stringVal = Integer.toString(counter1);
         textview1.setText(stringVal);
         counter1++;
    }

4 个答案:

答案 0 :(得分:1)

您无法阻止UI线程。通常当你想延迟做事时,你应该考虑使用Handler。在这种情况下,仅使用postDelayed的{​​{1}}功能可能更简单:

view

答案 1 :(得分:1)

您可以在每个onProgressUpdate中使用AsyncTask并设置新的TextView:

protected class InitTask extends AsyncTask<Context, Integer, String>
    {
        // -- run intensive processes here
        // -- notice that the datatype of the first param in the class definition matches the param passed to this method 
        // -- and that the datatype of the last param in the class definition matches the return type of this method
                @Override
                protected String doInBackground( Context... params ) 
                {
                        //-- on every iteration
                        //-- runs a while loop that causes the thread to sleep for 2 minutes
                        //-- publishes the progress - calls the onProgressUpdate handler defined below
                        //-- and increments the counter variable i by one
                        int i = 0;
                        while( i <= 50 ) 
                        {
                                try{
                                        Thread.sleep( 2*60*1000);
                                        publishProgress( i );
                                        i++;
                                } catch( Exception e ){
                                        Log.i("makemachine", e.getMessage() );
                                }
                        }
                        return "COMPLETE!";
                }

                // -- gets called just before thread begins
                @Override
                protected void onPreExecute() 
                {
                        Log.i( "makemachine", "onPreExecute()" );
                        super.onPreExecute();

                }

                // -- called from the publish progress 
                // -- notice that the datatype of the second param gets passed to this method
                @Override
                protected void onProgressUpdate(Integer... values) 
                {
                        super.onProgressUpdate(values);
                        Log.i( "makemachine", "onProgressUpdate(): " +  String.valueOf( values[0] ) );
                        _percentField.setText( ( values[0] * 2 ) + "%");
                        _percentField.setTextSize( values[0] );
                }

                // -- called if the cancel button is pressed
                @Override
                protected void onCancelled()
                {
                        super.onCancelled();
                        Log.i( "makemachine", "onCancelled()" );
                        _percentField.setText( "Cancelled!" );
                        _percentField.setTextColor( 0xFFFF0000 );
                }

                // -- called as soon as doInBackground method completes
                // -- notice that the third param gets passed to this method
                @Override
                protected void onPostExecute( String result ) 
                {
                        super.onPostExecute(result);
                        Log.i( "makemachine", "onPostExecute(): " + result );
                        _percentField.setText( result );
                        _percentField.setTextColor( 0xFF69adea );
                        _cancelButton.setVisibility( View.INVISIBLE );
                }
    }   

答案 2 :(得分:1)

你应该在这里使用Handler,因为它们不会阻止UI线程。如上所述。使用

posDelayed(your_runnable, deley_time_in_millis)

有关详细信息,请参阅Handler documentation和教程:Android Background Processing with Handlers and AsyncTask and Loaders

答案 3 :(得分:0)

执行以下操作

Handler handler = new Handler();

// perform first action
handler..postDelayed(new Runnable() {

            public void run() {
                // peform second action
            }
        }, 2*60*1000);