android开发分享Android – 使用postDelayed()调用定期运行一个方法

我有一个Android应用程序的情况下,我想开始一个networking活动(发送一些数据),应该每秒运行。 我做到这一点如下:

onCreate()我有代码:

 tv = new TextView(this); tv.postDelayed(sendData, 1000); 

sendData()函数:

  Handler handler = new Handler(); private Runnable sendData=new Runnable(){ public void run(){ try { //prepare and send the data here.. handler.removeCallbacks(sendData); handler.postDelayed(sendData, 1000); } catch (Exception e) { e.printStackTrace(); } } }; 

问题来了这样的:当用户按下后退button和应用程序出来(用户界面消失) sendData()函数仍然得到执行,这是我想要的。 现在,当用户重新启动应用程序时,我的onCreate()被再次调用,我得到了sendData()调用两次sendData() 。 它继续这样下去。 每次用户出来并重新启动,每秒钟会发生一次sendData()

我究竟做错了什么? 是我的new Handler()创build问题吗? 处理这个问题的最好方法是什么? 我想要一个sendData()每秒调用,直到用户退出应用程序(表单应用程序pipe理器)。

    你为什么不创build服务,并把逻辑放在onCreate() 。 在这种情况下,即使你按下后退button服务也会继续执行。 一旦你进入应用程序,它不会再次调用onCreate() 。 相反,它会调用onStart()

     final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { //Do something after 100ms Toast.makeText(c, "check", Toast.LENGTH_SHORT).show(); handler.postDelayed(this, 2000); } }, 1500); 

    也许涉及活动的生命周期方法来实现这一点:

     Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler.post(sendData); } @Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacks(sendData); } private final Runnable sendData = new Runnable(){ public void run(){ try { //prepare and send the data here.. handler.postDelayed(this, 1000); } catch (Exception e) { e.printStackTrace(); } } }; 

    在这种方法中,如果你按下你的活动的后退键或者调用finish(); ,它也会停止postDelayed的调用。

    请在下面的代码中检查下面它的工作方式,当你处于同一个活动时,你的处理程序将在每1秒之后运行

      HandlerThread handlerThread = new HandlerThread("HandlerThread"); handlerThread.start(); handler = new Handler(handlerThread.getLooper()); runnable = new Runnable() { @Override public void run() { handler.postDelayed(this, 1000); } }; handler.postDelayed(runnable, 1000); 

    您应该在Manifest.xml中设置andrid:allowRetainTaskState =“true”来启动Activity。 如果这个活动不是启动活动。 您应该在此活动中设置android:launchMode =“singleTask”

    我想你可以尝试不同的活动标志,因为它听起来像多个实例。

    “singleTop”“singleTask”“singleInstance”

    是我会尝试的,他们可以在清单内定义。

    我们有Java 8,我们不需要为处理程序编写太多的代码。

    只要写:

     final Handler handler = new Handler(); handler.postDelayed (() -> { //your code here }, TIME_DELAY); 

     Handler h = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==0){ // do stuff h.removeMessages(0); // clear the handler for those messages with what = 0 h.sendEmptyMessageDelayed(0, 2000); } } }; h.sendEmptyMessage(0); 

      以上就是android开发分享Android – 使用postDelayed()调用定期运行一个方法相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/518033.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐