我正在设计一个应用程序,只要应用程序位于前台,该应用程序就会定期向专用服务器发送状态.
在我通过网络搜索时,我看到了一些不同的方法,并想知道这样做的最佳方法是什么.
安排服务器调用的最佳方法是什么?
我看到的选项是:
计时器.
服务.
带AlarmManager的 BroadcastReciever .
你怎么看?
编辑:
我需要这个的原因是一个基于聊天的应用程序,它将所有用户操作发送到远程服务器.
即用户正在键入消息,用户正在阅读消息,用户在线,用户在线等.
这意味着每隔一段时间,我需要向服务器发送我正在做的事情,因为我和其他人打开聊天室,他们需要知道我在做什么.
与whatsapp消息反馈机制类似:

编辑#2:
现在几乎总是通过JobSchedulerAPI(或FirebaseJobDispatcher更低的API)安排重复任务,以防止电池耗尽问题,可以在Android培训的vitals部分阅读
假设我想每10秒执行一次操作,并不一定需要更新视图.
问题是:使用带有timertask的计时器是否更好(我的意思是更有效率和更有效),如下所示:
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
Run Code Online (Sandbox Code Playgroud)
或者只是一个带有postdelayed的处理程序
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Run Code Online (Sandbox Code Playgroud)
如果您能解释何时使用哪种方法以及为什么其中一种方法比另一种方法更有效(如果它实际上是这样),我将不胜感激.
请看下面的代码:
public class MyGridFragment extends Fragment{
Handler myhandler = new Handler() {
@Override
public void handleMessage(Message message) {
switch (message.what) {
case 2: {
ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
urls.addAll(theurls);
theimageAdapter.notifyDataSetChanged();
dismissBusyDialog();
break;
}}}};
}
Run Code Online (Sandbox Code Playgroud)
当我使用这样的处理程序时,我得到一个警告"处理程序应该是静态的,否则它容易发生内存泄漏." 有人能告诉我这样做的最佳方法是什么?