programing tip

Android / Java에서 JavaScript setInterval / setTimeout에 해당하는 것은 무엇입니까?

itbloger 2020. 7. 26. 12:38
반응형

Android / Java에서 JavaScript setInterval / setTimeout에 해당하는 것은 무엇입니까?


안드로이드에 대해 setInterval / setTimeout에 해당하는 것이 있으면 누구든지 말해 줄 수 있습니까? 아무도 그것을하는 방법에 대한 예가 있습니까?


항상 안드로이드와 마찬가지로이 작업을 수행하는 방법은 많이 있지만, 동일한 스레드에서 약간의 코드를 약간 실행하고 싶다고 가정하면 다음과 같이 사용합니다.

new android.os.Handler().postDelayed(
    new Runnable() {
        public void run() {
            Log.i("tag", "This'll run 300 milliseconds later");
        }
    }, 
300);

.. 이것은 거의 같습니다

setTimeout( 
    function() {
        console.log("This will run 300 milliseconds later");
    },
300);

setInterval ()

n 밀리 초마다 반복되는 기능

자바 스크립트

 setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);

대략적인 Java 동등

new Timer().scheduleAtFixedRate(new TimerTask(){
    @Override
    public void run(){
       Log.i("tag", "A Kiss every 5 seconds");
    }
},0,5000);

setTimeout ()

n 밀리 초 후에 만 ​​작동하는 기능

자바 스크립트

setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);

대략적인 Java 동등

new android.os.Handler().postDelayed(
    new Runnable() {
        public void run() {
            Log.i("tag","A Kiss after 5 seconds");
        }
}, 5000);

실제로 달성하고자하는 것에 따라 Android 처리기를 살펴보십시오.

http://developer.android.com/reference/android/os/Handler.html

이전에 Javascript setTimeout () 등을 사용하여 향후 작업 실행을 예약 한 경우 Android에서 수행하는 방법입니다 (postDelayed / sendMessageDelayed).

처리기 나 타이머는 Android 전화를 절전 모드에서 깨우지 않습니다. 다시 말해서, 화면이 꺼져 있거나 CPU가 잠자기 상태 일 때 실제로 발생하는 일정을 예약하려면 AlarmManager도 확인해야합니다.


휴대 전화를 깨우거나 앱을 다시 죽일 걱정이 없다면 다음을 시도해보십시오.

// Param is optional, to run task on UI thread.     
Handler handler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // Do the task...
        handler.postDelayed(this, milliseconds) // Optional, to repeat the task.
    }
};
handler.postDelayed(runnable, milliseconds);

// Stop a repeating task like this.
hander.removeCallbacks(runnable);

JavaScript에 대해서는 잘 모르지만 Timers가 원하는 것일 수 있습니다.

http://developer.android.com/reference/java/util/Timer.html

링크에서 :

원샷은 절대 시간 또는 상대 지연 후에 실행되도록 예약됩니다. 반복 작업은 고정 기간 또는 고정 요금으로 예약됩니다.


import java.util.Timer;
import java.util.TimerTask;

class Clock {
    private Timer mTimer = new Timer();

    private int mSecondsPassed = 0;
    private TimerTask mTask = new TimerTask() {
        @Override
        public void run() {
            mSecondsPassed++;
            System.out.println("Seconds passed: " + mSecondsPassed);
        }
    };

    private void start() {
        mTimer.scheduleAtFixedRate(mTask, 1000, 1000);
    }

    public static void main(String[] args) {
        Clock c = new Clock();
        c.start();
    }
}

Here's a setTimeout equivalent, mostly useful when trying to update the User Interface after a delay.

As you may know, updating the user interface can only by done from the UI thread. AsyncTask does that for you by calling its onPostExecute method from that thread.

new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Update the User Interface
        }

    }.execute();

The first answer is definitely the correct answer and is what I based this lambda version off of, which is much shorter in syntax. Since Runnable has only 1 override method "run()", we can use a lambda:

this.m_someBoolFlag = false;
new android.os.Handler().postDelayed(() -> this.m_someBoolFlag = true, 300);

I was creating a mp3 player for android, I wanted to update the current time every 500ms so I did it like this

setInterval

private void update() {
    new android.os.Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            long cur = player.getCurrentPosition();
            long dur = player.getDuration();
            currentTime = millisecondsToTime(cur);
            currentTimeView.setText(currentTime);
            if (cur < dur) {
                updatePlayer();
            }

            // update seekbar
            seekBar.setProgress( (int) Math.round((float)cur / (float)dur * 100f));
        }
    }, 500);
}

which calls the same method recursively

참고URL : https://stackoverflow.com/questions/4817933/what-is-the-equivalent-to-a-javascript-setinterval-settimeout-in-android-java

반응형