【问题标题】:when button is clicked many times, application becomes un-responsive多次单击按钮时,应用程序变得无响应
【发布时间】:2015-02-20 04:35:51
【问题描述】:

我正在开发一个 android 应用程序,其中有一个按钮,用于从服务器获取数据并显示到 TextView, 但问题是,如果用户多次单击同一个按钮,则应用程序在 Android 中会变得无响应

【问题讨论】:

  • 您的代码和 LogCat 输出在哪里
  • Logcat 显示什么?
  • 你是在使用 AsyncTask 从服务器获取数据吗?
  • 如何利用编程艺术仅在需要时异步获取数据?
  • 不,我没有使用 asyncTask 并且无响应意味着没有 logcat @PM77-1

标签: java android jakarta-ee android-button android-networking


【解决方案1】:

如果用户多次点击同一个按钮,应用程序 在 Android 中变得无响应

为避免应用程序在单击按钮时无响应:

1. Button click 时显示 ProgressBar 并在得到服务器响应后关闭它。

2.使用AsyncTask在后台线程中从服务器获取数据,因为如果我们将网络相关代码放在主线程上,那么应用程序将变得无响应,直到服务器没有返回响应

3. 当服务器请求已经在进行中时,还可以通过显示正确的消息(例如“进行中...”)来处理按钮单击。

使用布尔变量来处理点击事件:

boolean isTaskRunning=false;

在开始之前点击按钮AsyncTask检查isTaskRunning状态:

   if(!isTaskRunning){
       isTaskRunning=true;
       // start task for getting data from server

    }else{
         //... In progress...
    }

从服务器获取数据后将isTaskRunning 变量设置为false

【讨论】:

  • 但问题是我如何获取数据,因为异步任务返回 null。
  • @Rah:亲爱的问题,您说当用户点击多次应用程序变得无响应时,我根据您的问题得到了答案,现在您正在使问题答案的意义减少。
  • @Rah:这不是通过在 cmets 中附加新问题来提问的正确方法,如果您下次有其他问题,请提出新问题,而不是更新当前问题
  • @Rah: 好的,我假设您从doInBackground 的服务器收到响应?那么您是否收到服务器的响应?如果没有,请分享代码的相关部分以获得我们的更多帮助
  • @Rah:你是否在 doInBackground 中收到来自服务器的响应?
【解决方案2】:

尝试使用AsyncTask。它可能会解决您的问题。一次从服务器发送和接收数据时,应用程序可能会变得无响应。

【讨论】:

    【解决方案3】:

    您如何从服务器获取数据。如果您使用的是 Thread 或 AsyncTask 那就很好。当用户单击您的按钮时,禁用您的按钮,然后启动线程或 AsyncTask 以从服务器获取数据。收到数据后,将其填充到 textview 中并启用按钮。

    //disable click event
    b.setClickable(false);
    
    // enable click event
    b.setClickable(true);
    

    如果您在主线程上获取数据,那么您的应用可能会变得无响应并引发 ANR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多