相关疑难解决方法(0)

安排Android中的重复任务

我正在设计一个应用程序,只要应用程序位于前台,该应用程序就会定期向专用服务器发送状态.

在我通过网络搜索时,我看到了一些不同的方法,并想知道这样做的最佳方法是什么.

安排服务器调用的最佳方法是什么?

我看到的选项是:

  1. 计时器.

  2. ScheduledThreadPoolExecutor.

  3. 服务.

  4. AlarmManager的 BroadcastReciever .

你怎么看?

编辑:
我需要这个的原因是一个基于聊天的应用程序,它将所有用户操作发送到远程服务器.
即用户正在键入消息,用户正在阅读消息,用户在线,用户在线等.

这意味着每隔一段时间,我需要向服务器发送我正在做的事情,因为我和其他人打开聊天室,他们需要知道我在做什么.

与whatsapp消息反馈机制类似: 消息看起来交付

编辑#2:
现在几乎总是通过JobSchedulerAPI(或FirebaseJobDispatcher更低的API)安排重复任务,以防止电池耗尽问题,可以在Android培训的vitals部分阅读

android scheduled-tasks

116
推荐指数
3
解决办法
10万
查看次数

TimerTask vs Thread.sleep vs Handler postDelayed - 每N毫秒最准确的调用函数?

每N毫秒调用一个函数最准确的方法是什么?

  • 线程与Thread.sleep
  • 的TimerTask
  • 处理程序与postDelayed

我使用Thread.sleep 修改了这个例子,它不是很准确.

我正在开发一个音乐应用程序,它将在给定的BPM上播放声音.我知道创建一个完全准确的节拍器是不可能的,我不需要 - 只是想找到最好的方法来做到这一点.

谢谢

java multithreading android handler timertask

54
推荐指数
2
解决办法
3万
查看次数

我在哪里创建和使用ScheduledThreadPoolExecutor,TimerTask或Handler?

我需要让我的RSS Feed阅读器每隔10分钟检查一次新帖子,然后在有新帖子的情况下解析它们.我还需要每分钟都更新UI.

我从不同的来源阅读和听到了不同的东西.我目前的理解是我可以ScheduledThreadPoolExecutor用来制作两个预定的线程,其中一个需要Handler更新UI.我不确定这些类或者最有效的使用方法TimerTask.

我也很不确定在哪里制作这些的子类.一位朋友建议TimerTaskFeedParser课堂上扩展为内部课程以使其更简单.但是,要以这种方式实现它,我必须使用该run()方法TimerTask而不重写它,这意味着我不能简单地使用我需要的参数来运行需要的函数.

简而言之,为此安排任务的最佳方法是什么,我将在哪里实现这些?

android handler threadpool timertask scheduledexecutorservice

25
推荐指数
1
解决办法
2万
查看次数

ScheduledThreadPoolExecutor 只“滴答”一次

CountDownTimer在我的Activity. 我决定远离CountDownTimer并使用,ScheduledThreadPoolExecutor因为CountDownTimers 无法在onTick().

出于某种原因,我Runnable在下面的代码中只执行一次。我不确定为什么它不执行多次。该destroyCountdownTimer()功能没有受到影响。

private ScheduledThreadPoolExecutor mCountdownTimer;
private Tick mTick;

class Tick implements Runnable {
    @Override
    public void run() {
        Log.e("tick", String.valueOf(mAccumulatedMilliseconds));
        mAccumulatedMilliseconds += 1000;
        populateTimeAccumulated();
        populateTimeRemaining();
        updatePercentages();

        if (mTotalMilliseconds <= mAccumulatedMilliseconds) {
            destroyCountdownTimer();
        }
    }
}

private void startCountdown() {
    if (mAccumulatedMilliseconds < mTotalMilliseconds) {
        mCounterIsRunning = true;

        if (mCountdownTimer == null) {
            mCountdownTimer = new ScheduledThreadPoolExecutor(1);
        }

        if (mTick == null) { …
Run Code Online (Sandbox Code Playgroud)

android runnable

3
推荐指数
1
解决办法
508
查看次数