KMJ
KMJ

Reputation: 57

MultiThread in Android for Loop and Delay

As you can see, I have to do TASK1 and continually TASK2. Between 1 and 2, they have delay. And then I want to repeat it infinitely till activity will be finished.

I have no experience for thread.. I can't fix this error. Help ME!

      Timer timer = new Timer();
      timer.schedule(new TimerTask() {

          @Override
          public void run() {
          //TASK 1
          main_1.setVisibility(View.VISIBLE);
          main_2.setVisibility(View.INVISIBLE);
          main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));


                Handler mHandler = new Handler(Looper.getMainLooper());
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                    //TASK 2
                    main_1.setVisibility(View.INVISIBLE);
                    main_2.setVisibility(View.VISIBLE);
                    main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));

                    }
                }, 1000);
                }
            }, 1000, 1000);

And it's my error

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Upvotes: 1

Views: 59

Answers (2)

user4774371
user4774371

Reputation:

Timer runs on background thread. You can not update ui from background thread, so always use runOnUiThread for that purpose.

  Timer timer = new Timer();
  timer.schedule(new TimerTask() {

      @Override
      public void run() {
            YourActivity.this.runOnUiThread(new Runnable() {

              @Override
              public void run() {
                    main_1.setVisibility(View.VISIBLE);
                    main_2.setVisibility(View.INVISIBLE);              
                    main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
               }
            });

            Handler mHandler = new Handler(Looper.getMainLooper());
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                //TASK 2
                main_1.setVisibility(View.INVISIBLE);
                main_2.setVisibility(View.VISIBLE);
                main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));

                }
            }, 1000);
            }
        }, 1000, 1000);

Upvotes: 0

tiny sunlight
tiny sunlight

Reputation: 6251

 Timer timer = new Timer();
      timer.schedule(new TimerTask() { 

          @Override 
          public void run() { 
          //TASK 1 


         YourActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
 main_1.setVisibility(View.VISIBLE);
          main_2.setVisibility(View.INVISIBLE);
          main_1.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
            }
        });

                Handler mHandler = new Handler(Looper.getMainLooper());
                mHandler.postDelayed(new Runnable() {
                    @Override 
                    public void run() { 
                    //TASK 2 
        YourActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                  main_1.setVisibility(View.INVISIBLE);
                    main_2.setVisibility(View.VISIBLE);
                    main_2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left));
            }
        });


                    } 
                }, 1000); 
                } 
            }, 1000, 1000); 

Upvotes: 1

Related Questions