【问题标题】:Handler is not working at delay time in my background service处理程序在我的后台服务延迟时间不工作
【发布时间】:2016-10-05 05:43:44
【问题描述】:

我必须在 MyService.java 类中连续执行一些任务。为此,我使用 HandlermHandler.postDelayed(this, 40000); 在给定时间后不会被解雇。它每秒钟都会被解雇。请帮帮我

public class SendMessageService extends Service {

    private Handler mHandler = new Handler();
    private Runnable task;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        registerReceiver(stopReceiver, new IntentFilter("com.android.STOP_HANDLER"));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        task = new Runnable() {
            @Override
            public void run() {

                dosomething();
                mHandler.postDelayed(this, 40000);
            }
        };

        try {

            mHandler.postDelayed(task, 40000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return START_STICKY;
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(stopReceiver);
    }

    private void dosomething() {
       //perform my task
    }

    private BroadcastReceiver stopReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("receive","STOP");
            mHandler.removeCallbacks(task);
        }
    };
}

【问题讨论】:

  • 检查您的日志,也许try catch 块中有异常,并且处理程序最初没有被分配,所以它肯定会触发任何事情

标签: android service handler


【解决方案1】:

我把我的代码改成这个,它正在工作

 public class SendMessageService extends Service {

        private Handler mHandler = new Handler();


        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        @Override
        public void onCreate() {
            super.onCreate();

            registerReceiver(stopReceiver, new IntentFilter("com.android.STOP_HANDLER"));
        }

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {



            try {

                mHandler.postDelayed(task, 40000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return START_STICKY;
        }


        @Override
        public void onDestroy() {
            super.onDestroy();
            unregisterReceiver(stopReceiver);
        }

        private void dosomething() {
           //perform my task
        }

        private BroadcastReceiver stopReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d("receive","STOP");
                mHandler.removeCallbacks(task);
            }
        };


 private Runnable task = new Runnable() {
                @Override
                public void run() {

                    dosomething();
                    mHandler.postDelayed(this, 40000);
                }
            };
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多