精华内容
下载资源
问答
  • Android定时器延迟和重置
    2021-05-28 09:27:55

    我确定在这里的某处有类似的问题,但我似乎无法找到它。Android定时器延迟和重置

    这是我正在尝试做的。

    假设我已连接到服务器,并且如果在过去5分钟内没有用户拨打任何电话,我想断开连接。但是,如果连一个单一的呼叫时,5分钟计时器将复位,倒计时5将重新开始..

    它似乎很简单,但我是一种新的Android和试图搞清楚这些事情..

    在此先感谢!

    =======编辑

    所以这里的什么我想要做的代码的例子。

    try {

    client.publish(topic, message);

    success = true;

    if(topic.equals("response")) {

    // need to reset my 5 min timer here

    // but if 5 mins go by and this try/catch isn't called again,

    // need to call the client.disconnect() method here

    } else {

    client.disconnect();

    }

    } catch (Exception e) {

    success = false;

    e.printStackTrace();

    }

    所以基本上,每当有一个调用服务器时被调用。

    我需要在if语句中实现什么?

    ================= ANSWER @Saeed Mashhadi的答案编辑时,

    请参阅下面的日志输出。所以起初,它运行良好。当disconnectCounter每秒增加一次时,我又打了一个电话。

    呼叫后,disconnectCounter再次从1开始,但它开始每秒增加2。左边有时间戳。你能告诉我为什么会发生这种情况吗?

    11-05 15:50:59.395 13253-13521/ ~~ disconnectCounter - 1

    11-05 15:51:00.404 13253-13521/ ~~ disconnectCounter - 2

    11-05 15:51:01.401 13253-13521/ ~~ disconnectCounter - 3

    11-05 15:51:02.403 13253-13521/ ~~ disconnectCounter - 4

    11-05 15:51:03.394 13253-13521/ ~~ disconnectCounter - 5

    11-05 15:51:04.400 13253-13521/ ~~ disconnectCounter - 6

    11-05 15:51:05.396 13253-13521/ ~~ disconnectCounter - 7

    11-05 15:51:06.402 13253-13521/ ~~ disconnectCounter - 8

    11-05 15:51:07.408 13253-13521/ ~~ disconnectCounter - 9

    11-05 15:51:08.399 13253-13521/ ~~ disconnectCounter - 10

    11-05 15:51:09.407 13253-13521/ ~~ disconnectCounter - 11

    11-05 15:51:10.406 13253-13521/ ~~ disconnectCounter - 12

    11-05 15:51:11.401 13253-13521/ ~~ disconnectCounter - 13

    11-05 15:51:12.409 13253-13521/ ~~ disconnectCounter - 14

    ......

    11-05 15:51:27.498 13253-13253/ ~~~~~~~~~~~ USER CALL ~~~~~~~~~~~

    11-05 15:51:28.399 13253-13521/ ~~ disconnectCounter - 1

    11-05 15:51:28.514 13253-13521/ ~~ disconnectCounter - 2

    11-05 15:51:29.398 13253-13521/ ~~ disconnectCounter - 3

    11-05 15:51:29.515 13253-13521/ ~~ disconnectCounter - 4

    11-05 15:51:30.403 13253-13521/ ~~ disconnectCounter - 5

    11-05 15:51:30.519 13253-13521/ ~~ disconnectCounter - 6

    11-05 15:51:31.401 13253-13521/ ~~ disconnectCounter - 7

    11-05 15:51:31.512 13253-13521/ ~~ disconnectCounter - 8

    11-05 15:51:32.398 13253-13521/ ~~ disconnectCounter - 9

    11-05 15:51:32.510 13253-13521/ ~~ disconnectCounter - 10

    11-05 15:51:33.398 13253-13521/ ~~ disconnectCounter - 11

    11-05 15:51:33.506 13253-13521/ ~~ disconnectCounter - 12

    11-05 15:51:34.400 13253-13521/ ~~ disconnectCounter - 13

    11-05 15:51:34.504 13253-13521/ ~~ disconnectCounter - 14

    ......

    谢谢你!!

    2015-11-05

    ᴛʜᴇᴘᴀᴛᴇʟ

    +0

    答案是编辑,检查,并告诉我结果 –

    更多相关内容
  • 作用: 1、定时执行某种功能 2、重复执行、定时重复执行、定次数执行某种功能 类别: 1、 Thread(new Runnable) 2、Thread() ... android:orientation=vertical android:layout_width=match_parent and
  • 本篇文章主要介绍了Android实现定时器Timer的停止和重启实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Android定时器和Handler用法,实例分析了Android中的定时器与Handler相关使用技巧,非常具有实用价值,需要的朋友可以参考下
  • android 定时器

    2021-05-11 17:52:23
    android 定时器
  • Android定时器

    2021-06-02 22:43:54
    Timer Timer是Android直接启动定时器的类,也是我最早接触可以实现定时器的功能的工具类。 他的用法一般人都知道: // 初始化定时器Timer timer = new Timer();timer.schedule(new TimerTask() { @Override public ...

    CountDownTimer

    new CountDownTimer(3000, 1000) {

    public void onTick(long millisUntilFinished) {

    if (mTicketSuccessBtn != null) {

    mTicketSuccessBtn.setBackgroundColor(Color.parseColor("#8f8f8f"));

    mTicketSuccessBtn.setText("手动出票(" + millisUntilFinished / 1000 + ")");

    }

    }

    public void onFinish() {

    if (mTicketSuccessBtn != null) {

    mTicketSuccessBtn.setBackgroundColor(Color.parseColor("#3faff8"));

    mTicketSuccessBtn.setEnabled(true);

    }

    }

    }.start();

    AlarmManager,Handler, Timer, Thread。

    AlarmManager

    AlarmManager是系统开放的闹钟功能,使用方式和普通的manager没有区别。

    AlarmManager am = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE); // Schedule the alarm! Intent intent = new Intent(XXXXX);PendingIntent sender = PendingIntent.getBroadcast(mcontext,requestCode, intent, 0); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, sender);

    上面就是定时器的基本用法,先获取manager,然后定义闹钟的flag,循环时间,到指定时间发出的pendingIntent。

    一般都发出的pendingIntent都是广播,我们自定义一个广播接收器,就可以通过接收这个广播,来处理自己的功能逻辑了。

    这里需要注意在独立进程中配置,这是android所定义的

    优点总结

    1,Alarm定时不需要程序自身去维护,而又系统来维护,使得程序更好避免了容易出错问题,更是占用系统资源,cpu占有率。

    2,即使程序退出后,程序自身不会有任何烦恼的问题,系统到时间自动调用对应组件执行定义好的逻辑

    3,定时的多样性,包括一次定时,循环定时(在xx年x月x日执行,周一至周五执行,每天几点几分执行。。。)

    适用场景

    个人觉得比较适用于独立的功能逻辑,例如如果app需要定时从服务器抓取最新的数据,使用独立的service会与主体的功能分离、便于维护,关键是耗电低,不易出错。

    Handler

    Handler可以帮助我们在子线程中操作UI线程,例如子线程解析数据,解析结束后通知UI刷新界面。他本身也可以实现定时器。

    private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: // 移除所有的msg.what为0等消息,保证只有一个循环消息队列再跑 handler.removeMessages(0); // app的功能逻辑处理 ... // 再次发出msg,循环更新 handler.sendEmptyMessageDelayed(0, 1000); break; case 1: // 直接移除,定时器停止 handler.removeMessages(0); break; default: break; } }; };

    只要在启动定时器的时候,Handler.sendEmptyMessage(0),定时器就启动了。继续循环和停止的方法,注释上已经写了。

    优点总结

    每次循环都是在主线程中操作,避免了子线程和主线程之间的穿插交互,个人觉得比timer好控制,功能实现也很简单。

    适用场景

    个人觉得比较适用连续更新UI,不做复杂耗时的处理的情况,例如在播放器中,我们需要更新当前播放进度的时间的显示,仅仅是更新了文字显示,用handler就是个不错的选择。

    Timer

    Timer是Android直接启动定时器的类,也是我最早接触可以实现定时器的功能的工具类。

    他的用法一般人都知道:

    // 初始化定时器Timer timer = new Timer();timer.schedule(new TimerTask() { @Override public void run() { Log.e("lzp", "timer excute"); }}, delay, period);// 停止定时器private void stopTimer(){ if(timer != null){ timer.cancle(); // 一定设置为null,否则定时器不会被回收 timer = null; }}

    delay : 从定时器初始化成功 开始启动 的延迟时间。

    period:定时器的间隔时间。

    优点总结

    Timer的使用很简单,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。

    适用场景

    跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的list进行排序,在TimerTask中执行不会阻塞子线程,常常与handler结合使用,在处理完复杂耗时的操作后,通过handler来更新UI界面。

    特别吐槽:对于部分手机,如果你在TimerTask直接更新了UI线程是不会报错的,而且运行正常,但是一定注意,更新UI一定要在主线程中执行,否则排查错误的时候你懂得。而且这个东西特别耗电,特别耗电,特别耗电,重要的事情说三遍,一定在不使用的时候关闭,慎用。

    **

    Thread

    Thread实现定时器是创建一个子线程,在里面while循环,可以通过handler来更新UI。个人觉得Thread和Timer没区别,只是长得不一样。

    private MyThread thread; private class MyThread extends Thread { public boolean stop; public void run() { while (!stop) { // 处理功能 // 通过睡眠线程来设置定时时间 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; }; / * 启动线程 * / private void start() { if (thread == null) { thread = new MyThread(); thread.start(); } } /* * 停止线程 * */ private void stop() { if (thread != null) { thread.stop = true; thread = null; } }

    优点总结

    觉得跟Timer差不多,没什么特殊优点

    适用场景

    跟Timer差不多吧 ,多线程如果考虑不周经常会出问题,经常会出现多个相同功能的线程同时存在,android本身对于子线程的使用使用数量是有限制的,而且一个app同时跑多个线程是一个很可怕的事情,所以和Timer一样,使用的时候一定要谨慎考虑

    展开全文
  • android 定时器demo

    热门讨论 2014-01-20 11:01:32
    定时器的 源码分享 供大家一起学习一起进步
  • android定时器Timer实例

    2019-04-10 01:09:05
    NULL 博文链接:https://huangbowen-java.iteye.com/blog/1666353
  • Android开发中,经常会用到需要定时更新界面或者周期性地读取发送数据,本资源通过一个例子实现了定时器和线程,欢迎参考!
  • Android 定时器

    2018-10-09 15:58:53
    多种方式实现已详细标注,这是demo编写,可拖入项目直接使用 * Handler与timer及TimerTask结合 * Handler与线程的sleep(long) * 使用定时器进行主ui界面的更新,Timer/handler/ CountDownText
  • 主要介绍了Android 定时器实现图片的变换的相关资料,利用到定时器和handler,message的结合实现改功能,需要的朋友可以参考下
  • Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的...
  • Android定时器功能实现方法
  • Android中实现定时器的四种方式 第一种方式利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); //delay为long,period为long:从现在起过delay毫秒...
  • Android定时器崩溃取消

    2021-06-03 02:01:04
    Android定时器崩溃取消然后我想要做的是点击一个按钮,然后创建一个电子邮件。除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃。当按下按钮时试图取消计时器时,也会使应用程序崩溃。任何帮助,将不胜...

    我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款。Android定时器崩溃取消

    然后我想要做的是点击一个按钮,然后创建一个电子邮件。除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃。当按下按钮时试图取消计时器时,也会使应用程序崩溃。

    任何帮助,将不胜感激。

    下面的代码片段:

    public class myApplication extends Activity {

    StringBuilder str;

    Timer t;

    Button mailbutton;

    public void onCreate(Bundle savedInstanceState) {

    final StringBuilder str = new StringBuilder(1000);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    addListenerOnButton();

    TimerTask task = new TimerTask() {

    @Override

    public void run()

    {

    /// do stuff here

    }

    }

    t = new Timer();

    t.schedule(task,2000,2000);

    }

    public void addListenerOnButton() {

    mailbutton = (Button) findViewById(R.id.emailbutton);

    mailbutton.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View arg0) {

    t.cancel();

    Intent i = new Intent(Intent.ACTION_SEND);

    i.setType("text/plain");

    i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"});

    i.putExtra(Intent.EXTRA_SUBJECT, "subject");

    i.putExtra(Intent.EXTRA_TEXT , str.toString());

    try {

    startActivity(Intent.createChooser(i, "Send mail"));

    } catch (android.content.ActivityNotFoundException ex) {

    }

    }

    });

    }

    }

    logcat的输出:

    04-19 09:13:11.143: W/dalvikvm(12613): threadid=1: thread exiting with uncaught exception (group=0x40c421f8)

    04-19 09:13:11.148: E/AndroidRuntime(12613): FATAL EXCEPTION: main

    04-19 09:13:11.148: E/AndroidRuntime(12613): java.lang.NullPointerException

    04-19 09:13:11.148: E/AndroidRuntime(12613): at uk.co.application.applicationActivity$2.onClick(applicationActivity.java:94)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.view.View.performClick(View.java:3591)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.view.View$PerformClick.run(View.java:14263)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.os.Handler.handleCallback(Handler.java:605)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.os.Handler.dispatchMessage(Handler.java:92)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.os.Looper.loop(Looper.java:137)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at android.app.ActivityThread.main(ActivityThread.java:4507)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at java.lang.reflect.Method.invokeNative(Native Method)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at java.lang.reflect.Method.invoke(Method.java:511)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

    04-19 09:13:11.148: E/AndroidRuntime(12613): at dalvik.system.NativeStart.main(Native Method)

    2012-04-19

    fdf33

    +0

    从logcat中添加你的错误日志。 –

    2012-04-19 00:08:43

    +0

    你可以发布崩溃日志吗? –

    2012-04-19 00:08:52

    +0

    请发布locat stacktrace –

    2012-04-19 00:09:02

    展开全文
  • 用药提醒程序设计(原创)(定时、定时3次、按用户定时,前半小时2分钟提醒一次,后一个半小时10分钟提醒一次) 思路大致是这样的: 1.用户手动输入(模拟服务器发来的消息),将用药提醒时间存入SQLITE数据库,...
  • android定时器

    2015-09-24 16:00:57
    android定时器实现每天定时执行任务
  • Android定时器Timer简单使用

    千次阅读 2021-10-25 09:45:33
    Android定时器Timer简单使用Timer简介Timer使用总结 Timer简介 Timer(计时器)位于 java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期重复执行。每个计时器对象对应一个后台线程...

    Android定时器Timer简单使用

    Timer简介

    Timer(计时器)位于 java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期重复执行。每个计时器对象对应一个后台线程(TimerThread)。简单理解为创建Timer对象,对应TimerThread线程循环开始从TaskQueue队列中执行一个TimerTask任务。

    Timer使用

    1. 创建Timer对象

      var timer = Timer()
      
    2. 添加需要执行的任务

      // 创建计时器对象
      var timer = Timer() 
      // 创建计时器任务
      var timerTask: TimerTask = object : TimerTask() {
      	override fun run(){
      		Log.i("Timer", "定时器执行一次")
      	}
      }
      // 添加任务,设定开始计时器时间,第2个参数为时间单位毫秒,如果是0,立即执行
      timer.schedule(timerTask, 5000)
      

      执行以上代码,可以从控制台看到打印 定时器执行一次,以上代码适用于一次性任务的执行,如启动页定时跳转到首页。

    3. 循环执行任务

      var timer = Timer() 
      // 创建计时器任务
      var timerTask: TimerTask = object : TimerTask() {
      	override fun run(){
      		Log.i("Timer", "定时器执行一次")
      	}
      }
      // 添加任务,设定开始计时器时间,第2个参数为0,立即执行,第3个参数为循环周期间隔为5s
      timer.schedule(timerTask, 0, 5000)
      

      这里需要注意下,第2个参数启动定时器时间为0,代表立即启动,相应的任务会被立即执行,第3个参数为周期间隔5s,对应每5s后执行一次任务。

    4. 取消任务

      var timer = Timer()
      timer.cancel() // 取消任务
      

    总结

    以上就是简单使用计时器(Timer)的例子,可以结合自身需求使用,这里需要注意的是,循环使用时,记得在不需要执行的时候取消任务执行,避免出现内存泄露相关的问题。

    展开全文
  • 1.首先实现android定时器开启触发 2.在定时器结束的方法中再次触发开启定时器即可 package com.wyze.mercury.common.utils; import android.os.CountDownTimer; import com.wyze.mercury.common.TimerListener;...
  • android 定时器 循环器

    2021-07-21 15:29:13
    //全局唯一计时器 节省资源 public class TimeUtils { private static TimeUtils timeUtils; ArrayList<WeakReference<OnTimeCallListent>> listents = new ArrayList<>.....
  • android-timer 基于Handler的Android计时器与倒计时器 原始地址: 特性 支持操作: 开始 暂停 恢复 取消 使用 allprojects { repositories { .. . maven { url ' https://jitpack.io ' } } } dependencies { ...
  • 主要为大家详细介绍了Android定时器和倒计时实现淘宝秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android 定时器Timer

    千次阅读 2019-07-29 11:00:29
    定义一个定时器,处理handler Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { Thread thread = new Thread(new Runnab...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,292
精华内容 9,316
关键字:

android定时器

友情链接: 71955147.zip