Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
活动创建方法android上的启动计时器_Android_Timer - Fatal编程技术网

活动创建方法android上的启动计时器

活动创建方法android上的启动计时器,android,timer,Android,Timer,当管理员在浏览器上推送消息时,我需要向应用程序用户显示消息。为此,我实现了一个计时器,以便在应用程序启动时向用户显示一条消息。如果推送新消息,计时器将保持运行,每20分钟获取一次消息。我的计时器工作正常,但按一下按钮 我希望我的计时器在活动加载后立即启动 这是显示消息的正确方式吗?(就像横幅一样) 定时器消耗资源的程度如何 计时器任务 按钮点击事件 您可以使用以下代码: package packagename.timerService; import java.text.SimpleDateF

当管理员在浏览器上推送消息时,我需要向应用程序用户显示消息。为此,我实现了一个计时器,以便在应用程序启动时向用户显示一条消息。如果推送新消息,计时器将保持运行,每20分钟获取一次消息。我的计时器工作正常,但按一下按钮

  • 我希望我的计时器在活动加载后立即启动
  • 这是显示消息的正确方式吗?(就像横幅一样)
  • 定时器消耗资源的程度如何
  • 计时器任务 按钮点击事件 您可以使用以下代码:

    package packagename.timerService;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import android.app.Service;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Handler;
    import android.os.IBinder;
    
    public class TimerService extends Service{
    
        public static final String BROADCAST_TIMER_ACTION = "packagename.timerService.TimerService";
        private final Handler handler = new Handler();
        private final Handler updateUIHandler = new Handler();
    
    
        Intent intent;
        int time = 0;
        private int durationTime = 0;
    
        private int starDate;
        private int currentDate;
        private Date startTaskDate;
        private String taskComment;
    
    
        @Override
        public void onCreate() {
            // Called on service created
            intent = new Intent(BROADCAST_TIMER_ACTION);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            try {
    
    
                    handler.removeCallbacks(sendUpdatesToUI);
                    handler.post(sendUpdatesToUI); //post(sendUpdatesToUI);
                    starDate = Calendar.getInstance().get(Calendar.DATE);
                    durationTime = 0;
                    startTaskDate = new Date();
    
    
                }
            } catch (Exception e) {}
            return START_STICKY;
        }
    
        private Runnable sendUpdatesToUI = new Runnable() {
            public void run() {
                try{
                    displayLoggingInfo();
                    time ++;
                    durationTime ++;
                    handler.postDelayed(this, 60 * 1000); // 1 minute
                }catch (Exception e) { }
            }
        };
    
        private Runnable sendUpdatesToUIOnResume = new Runnable() {
            public void run() {
                displayLoggingInfoForOnResume();
            }
        };
    
        private void displayLoggingInfoForOnResume() {
            try{
                currentDate = Calendar.getInstance().get(Calendar.DATE);
    
                intent.putExtra("changeDate", String.valueOf(false));
    
                intent.putExtra("time", String.valueOf(time == 0 ? time : time - 1 ));
                sendBroadcast(intent);
            } catch (Exception e) { }
        }
    
        private void displayLoggingInfo() {
            try{
                currentDate = Calendar.getInstance().get(Calendar.DATE);
    
                intent.putExtra("changeDate", String.valueOf(false));
    
                intent.putExtra("durationTime", String.valueOf(durationTime));
                intent.putExtra("time", String.valueOf(time));
    
                sendBroadcast(intent);
            }catch (Exception e) {
                // TODO: handle exception
            }
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onDestroy() {
            try {
                handler.removeCallbacks(sendUpdatesToUI);
                updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
                durationTime = 0;
                time = 0;
    
                super.onDestroy();
            } catch (Exception e) { }
    
        }
    
        @Override
        public boolean stopService(Intent name) {
            handler.removeCallbacks(sendUpdatesToUI);
            updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
            durationTime = 0;
            time = 0;
    
            return super.stopService(name);
        }
    
    
    }
    

    谢谢你的回复。我需要使用webservice从webserver获取数据,然后将数据显示到活动主线程中的textview控件中。这项服务有助于达到这个目的吗?我的意思是,我没有使用timertask,所以我建议您处理程序。postDelayed(这个,20*60*1000);/*20分钟*/像计时器一样
    b.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Button b = (Button) v;
                if (b.getText().equals("stop")) {
                    timer.cancel();
                    timer.purge(); 
                    b.setText("start");
                } else {
                    starttime = System.currentTimeMillis();
                    timer = new Timer(); 
                    timer.schedule(new secondTask(), 8000, 1200000); 
                    b.setText("stop");
                }
            }
        });
    
    package packagename.timerService;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import android.app.Service;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Handler;
    import android.os.IBinder;
    
    public class TimerService extends Service{
    
        public static final String BROADCAST_TIMER_ACTION = "packagename.timerService.TimerService";
        private final Handler handler = new Handler();
        private final Handler updateUIHandler = new Handler();
    
    
        Intent intent;
        int time = 0;
        private int durationTime = 0;
    
        private int starDate;
        private int currentDate;
        private Date startTaskDate;
        private String taskComment;
    
    
        @Override
        public void onCreate() {
            // Called on service created
            intent = new Intent(BROADCAST_TIMER_ACTION);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            try {
    
    
                    handler.removeCallbacks(sendUpdatesToUI);
                    handler.post(sendUpdatesToUI); //post(sendUpdatesToUI);
                    starDate = Calendar.getInstance().get(Calendar.DATE);
                    durationTime = 0;
                    startTaskDate = new Date();
    
    
                }
            } catch (Exception e) {}
            return START_STICKY;
        }
    
        private Runnable sendUpdatesToUI = new Runnable() {
            public void run() {
                try{
                    displayLoggingInfo();
                    time ++;
                    durationTime ++;
                    handler.postDelayed(this, 60 * 1000); // 1 minute
                }catch (Exception e) { }
            }
        };
    
        private Runnable sendUpdatesToUIOnResume = new Runnable() {
            public void run() {
                displayLoggingInfoForOnResume();
            }
        };
    
        private void displayLoggingInfoForOnResume() {
            try{
                currentDate = Calendar.getInstance().get(Calendar.DATE);
    
                intent.putExtra("changeDate", String.valueOf(false));
    
                intent.putExtra("time", String.valueOf(time == 0 ? time : time - 1 ));
                sendBroadcast(intent);
            } catch (Exception e) { }
        }
    
        private void displayLoggingInfo() {
            try{
                currentDate = Calendar.getInstance().get(Calendar.DATE);
    
                intent.putExtra("changeDate", String.valueOf(false));
    
                intent.putExtra("durationTime", String.valueOf(durationTime));
                intent.putExtra("time", String.valueOf(time));
    
                sendBroadcast(intent);
            }catch (Exception e) {
                // TODO: handle exception
            }
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onDestroy() {
            try {
                handler.removeCallbacks(sendUpdatesToUI);
                updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
                durationTime = 0;
                time = 0;
    
                super.onDestroy();
            } catch (Exception e) { }
    
        }
    
        @Override
        public boolean stopService(Intent name) {
            handler.removeCallbacks(sendUpdatesToUI);
            updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
            durationTime = 0;
            time = 0;
    
            return super.stopService(name);
        }
    
    
    }