অ্যান্ড্রয়েড / জাভার কোনও জাভাস্ক্রিপ্ট সেটইন্টারওয়াল / সেটটাইমআউটের সমতুল্য কী?


129

অ্যান্ড্রয়েডের জন্য সেটআইন্টারওয়াল / সেটটাইমআউটের সমতুল্য উপস্থিত রয়েছে কি কেউ আমাকে বলতে পারবেন? কীভাবে এটি করবেন সে সম্পর্কে কারও কোনও উদাহরণ আছে?

উত্তর:


245

অ্যান্ড্রয়েডের মতো সর্বদা এটি করার প্রচুর উপায় রয়েছে তবে ধরে নিই যে আপনি কেবল একই থ্রেডে কিছুটা পরে কোডের একটি অংশটি চালাতে চান, আমি এটি ব্যবহার করি:

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);

এটি ড্রয়ারের নির্বাচন এবং টুকরো টুকরো জন্য একটি খুব ভাল সমাধান
Gon goodalo

6
আমার প্রয়োজন হলে আমি কীভাবে এটি বাতিল করতে পারি?
কোয়ান্টিন রায়

রান () পদ্ধতিতে আপনি কীভাবে কার্যকলাপের সুযোগ পাবেন?
অ্যান্ডি

@ অ্যান্ডি এর মতো:MyActivityName.this.myFunctionOnActivity()
বেন ক্লেটন

1
@QuentinRoy: Handler timeout = new Handler(); final Runnable r = new Runnable{...}; timeout.postDelayed(r, 300);এবং আপনি এটি বাতিল করতে চাইলে:timeout.removeCallbacks(r);
বাস্তিয়ান স্প্রিঙ্গের

101

setInterval ()

ফাংশন যা প্রতি এন মিলিসেকেন্ডে নিজেকে পুনরাবৃত্তি করে

জাভাস্ক্রিপ্ট

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

আনুমানিক জাভা সমান

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);

আনুমানিক জাভা সমান

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

5
জন্য scheduleAtFixedRateপদ্ধতি, কিভাবে আপনি কার্যকলাপ মধ্যে টাইমার একবার যে কার্যকলাপ সমাপ্ত হয়েছে বাতিল করব?
অরেওনিল

2
@ ব্যবহারকারী 824294 আপনি আপনার টাইমার উদাহরণটি একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন এবং যখন আপনি নির্ধারিত কাজগুলি বন্ধ করতে চান তখন "বাতিল ()" কল করতে পারেন - টাইমার টি = নতুন টাইমার (); t.scheduleAtFixedRate (...); - এবং তারপরে t.cancel () কল করুন; আপনি যখন ইচ্ছা।
এজেসবিস

14

আপনি যদি আপনার ফোনটি জাগাতে বা আপনার অ্যাপটিকে মৃত থেকে ফিরিয়ে আনতে উদ্বিগ্ন না হন তবে চেষ্টা করুন:

// 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.
handler.removeCallbacks(runnable);

আমার ফোনে (হুয়াওয়ে পি স্মার্ট) হ্যান্ডলার স্লিপ মোড থেকে ডিভাইসটি জাগ্রত করে না ( যেমনটি অন্য উত্তরে অ্যাপানলোকো বলেছিলেন )
ফ্রাঙ্কো

13

আপনি আসলে কী অর্জন করতে চান তার উপর নির্ভর করে আপনার অ্যান্ড্রয়েড হ্যান্ডলারগুলি একবার দেখে নেওয়া উচিত:

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

আপনি যদি ভবিষ্যতে কোনও কাজের সময় নির্ধারণের জন্য জাভাস্ক্রিপ্ট সেটটাইমআউট () ইত্যাদি ব্যবহার করেন তবে এটি করার Android পদ্ধতি এটি (পোস্টডিলাইড / সেন্ডমেসেজডেলিড)।

নোট করুন যে হ্যান্ডলার বা টাইমার উভয়ই অ্যান্ড্রয়েড ফোনটিকে স্লিপ মোড থেকে জাগ্রত করে না। অন্য কথায়, আপনি যদি স্ক্রিনটি বন্ধ / সিপিইউ ঘুমিয়ে থাকা সত্ত্বেও বাস্তবে কিছু হওয়ার জন্য কিছু নির্ধারণ করতে চান তবে আপনাকে অ্যালার্ম ম্যানেজারটিও পরীক্ষা করে দেখতে হবে।


5

আমি জাভাস্ক্রিপ্ট সম্পর্কে খুব বেশি কিছু জানি না তবে আমি মনে করি টাইমার্স আপনি যা খুঁজছেন তা হতে পারে।

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

লিঙ্ক থেকে:

এক-শট একটি নির্ধারিত সময়ে বা আপেক্ষিক বিলম্বের পরে চালানোর জন্য নির্ধারিত। পুনরাবৃত্ত কাজগুলি একটি নির্দিষ্ট সময়সীমা বা একটি নির্দিষ্ট হারের সাথে নির্ধারিত হয়।


দ্রষ্টব্য: এটি আপনাকে মূল / ইউআই থ্রেডে নয়, পটভূমির থ্রেডে কল করে।
পাং

এটি কোনও উত্তর নয়, তবে বাহ্যিক তথ্যের একটি রেফারেন্স যাতে ওপিএস সমাধান থাকতে পারে বা নাও থাকতে পারে। ওপি যে প্রাসঙ্গিক কোডটি ব্যবহার করতে পারে তা দয়া করে পেস্ট করুন!
লেভ

5

প্রথম উত্তরটি অবশ্যই সঠিক উত্তর এবং আমি এই ল্যাম্বডা সংস্করণটি বন্ধ করে দিয়েছি, যা সিনট্যাক্সের চেয়ে অনেক কম। রান্নেবলের যেহেতু কেবলমাত্র 1 টি ওভাররাইড পদ্ধতি "রান ()" রয়েছে তাই আমরা একটি ল্যাম্বডা ব্যবহার করতে পারি:

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

5
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();
    }
}

4

এখানে একটি সেটটাইমআউট সমতুল্য, বিলম্বের পরে ইউজার ইন্টারফেস আপডেট করার চেষ্টা করার সময় বেশিরভাগ ক্ষেত্রে কার্যকর।

আপনি যেমন জানেন যে ইউজার ইন্টারফেসটি আপডেট করা কেবলমাত্র ইউআই থ্রেড থেকে করা সম্ভব। অ্যাসিঙ্কটাস্ক সেই থ্রেড থেকে এটির পোস্টপ্যাকসেকিউট পদ্ধতিতে কল করে আপনার জন্য তা করে।

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();

3
1. একইভাবে, onProgressUpdate()অনুকরণ করতেও ব্যবহার করা যেতে পারে setInterval()২. AsyncTask একটি থ্রেড পুলে চালিত হয় (বা কেবল একটি এক থ্রেড), তাই ক। এটি অন্য AsyncTaskশেষ না হওয়া পর্যন্ত অপেক্ষা করতে হতে পারে ; । এটি পুল থেকে একটি থ্রেড গ্রহণ করবে।
পাং

এই প্রসঙ্গে অ্যাসিঙ্ক টাস্কটি ব্যবহার করে প্রচুর সমস্যা রয়েছে (কেবলমাত্র একটি থ্রেড এবং অকারণে একটি থ্রেড লক করা) - অন্যান্য সমাধানগুলি আরও ভাল।
প্রাথমিক

4

আমি অ্যান্ড্রয়েডের জন্য একটি এমপি 3 প্লেয়ার তৈরি করছিলাম, আমি বর্তমান সময়ের প্রতি 500 মিমি আপডেট করতে চেয়েছিলাম তাই আমি এটির মতো করেছিলাম

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);
}

যা একই পদ্ধতিটিকে পুনরাবৃত্তি বলে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.