【问题标题】:Android How to call a method multiple times with a delay between themAndroid如何多次调用一个方法,它们之间有延迟
【发布时间】:2014-09-26 00:52:43
【问题描述】:

我想问一下,是否有更好的方法来多次调用一个方法,每次调用之间有 5 秒的延迟。

但我真正想要的是调用 Toas() 方法大约 7 次,并且使用下面的代码,它看起来不正确。

谢谢大家

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

CallMultipleToast();


........



    private void CallMultipleToast(){

             Runnable call_1 = new Runnable() {
                 @Override
                 public void run() {
                     Toast("Message one");


                         Runnable call_2 = new Runnable() {
                             @Override
                             public void run() {
                                 Toast("Message two");


                                     Runnable call_3 = new Runnable() {
                                         @Override
                                         public void run() {
                                             Toast("Message three");
                                             //CAN I ADD MORE
                                         }
                                     };//end call_3
                                     new Handler().postDelayed(call_3, 5000);


                             }
                         };//end call_2
                         new Handler().postDelayed(call_2, 5000);

                 }
             };//end call_1
             new Handler().postDelayed(call_1, 5000);


    }





    private void Toast(String message){
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }

【问题讨论】:

  • 您希望有什么具体的用例场景?
  • 无需嵌套可运行对象或拥有多个处理程序。一个处理程序就足够了。如果所有可运行对象只是显示一个 toast,只需创建一个子类,将消息作为构造函数中的参数。
  • 谢谢大家的建议

标签: java android performance timer runnable


【解决方案1】:

也许你可以这样做:

private void CallMultipleToast(){
  Thread t = new Thread(){
        @Override
        public void run(){
            try {
                for(i=0;i<7;i++){
                   Toast("Message "+(i+1));
                   sleep(5000);
                }

            } catch (InterruptedException ex) {
                Log.i("error","thread");
            }
        }
    };
   t.start();
 }

【讨论】:

    【解决方案2】:

    试试这个:

    final int DELAY= 5000;
    int count = 0;
    String[] msgs = {"one", "two", "three", "four", "five"};
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            if (count < 5) {
                Toast(msgs[count]);
                handler.post(runnable);
            }
            count++;
        }
    };
    
    handler.postDelayed(runnable, DELAY);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-11
      • 2013-03-10
      • 1970-01-01
      • 2015-12-17
      • 2011-03-05
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多