求一个99%以上android开发人员都不知道如何实现的简单功能的实现方法

yunyu97 2015-10-02 08:04:18
要求非常简单,就是写一个程序,只允许存在一个主线程。
界面上有两个按钮,一个开始计算,一个取消计算。
有一个全局变量cancel,初始化为false。
点击开始计算后,在事件处理函数中进行一个无限循环,每次循环要求睡眠10毫秒。
伪代码如下:
while (cancel == false)
{
sleep(10);
/////////////////////////////////////////
//此处可以添加其他代码
//////////////////////////////////////////
}
/////点击取消后退出应用

点击取消计算,在事件处理函数中将cancel设置为true

现在的问题,无论是在windows,mac,ios上都非常容易实现这一模型,但是android上如何实现?
请注意不允许添加额外的线程!!!!!!!!
...全文
534 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2015-10-12
  • 打赏
  • 举报
回复
android也有UI消息循环吧,
按你说的, 必须有while.
消息循环就是一个while, 你可以重载相关方法, 在里面处理正常消息响应还有你的耗时操作.
清澈@Cherry 2015-10-12
  • 打赏
  • 举报
回复
顶起来,看你们的聊天好搞笑,楼主不过是想看看到底能不能执行,也许也跟我一样是个小白,我只围观,不说话
  • 打赏
  • 举报
回复
引用 #17 楼
楼主想多了,你按下开始计算根本就没法结束按下事件的处理函数,如何去处理另外一个按钮的事件呢。
——————————————————————————————

因为他只会写 while(true),就像靠这点技术想把有着真正多线程编程经验的人给排挤掉。
神-气 2015-10-11
  • 打赏
  • 举报
回复
楼主想多了,你按下开始计算根本就没法结束按下事件的处理函数,如何去处理另外一个按钮的事件呢。
yunyu97 2015-10-11
  • 打赏
  • 举报
回复
请大家认真看要求,while(true)循环是必须的。
画虎烂 2015-10-11
  • 打赏
  • 举报
回复
第一想到的是用handle
qq_31798167 2015-10-08
  • 打赏
  • 举报
回复
说听的好像挺简单,不会做
sjj370216540 2015-10-08
  • 打赏
  • 举报
回复
postDelayed(Runnable, long), 虽然里面有个Runnable 不过只要你看源码 就会发现它调用里面的 run()方法 ,而不是start() 所以是在主线程实行的
jiiadoadflb 2015-10-08
  • 打赏
  • 举报
回复
这个实现起来挺简单的,也不复杂而且方式很多,你可以自己试试,布局就不发了,每10毫秒会自增长1然后更新显示到textview中。
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

  private TextView _textView;
  private Button _button;
  private Handler _handler;
  private int _i = 0;
  private RunTask _runTask;
  private boolean _cancel = false;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    _handler = new Handler();
    _runTask = new RunTask();
    _textView = (TextView) this.findViewById(R.id.textview);
    _button = (Button) this.findViewById(R.id.button);
    _button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        _cancel = true;
        _handler.removeCallbacks(_runTask);
      }
    });
    _handler.postDelayed(_runTask, 10);
  }

  private class RunTask implements Runnable{

    @Override
    public void run() {
      _textView.setText(_i + "");
      _handler.postDelayed(this, 10);
      _i ++;
    }
  }
}
雅痞Joy 2015-10-08
  • 打赏
  • 举报
回复
Birds2018 2015-10-08
  • 打赏
  • 举报
回复
Android好弱
开发者_android 2015-10-08
  • 打赏
  • 举报
回复
牛人被问死了,no way。
yunyu97 2015-10-08
  • 打赏
  • 举报
回复
实际上,我是希望在耗时操作中每隔一段时间调用一下当前线程的事件处理,使当前线程还能响应各种消息。
月盡天明 2015-10-08
  • 打赏
  • 举报
回复
只有一个UI线程是办不到的。 除非你让它卡死、
JPF1024 2015-10-08
  • 打赏
  • 举报
回复
你这个感觉是在挑战SDK,这个需求在Android 4.0 之前估计没多大问题,但是4.0之后,主线程不允许耗时操作。即使你有耗时操作,进行一会系统就会提示用户无响应,然后可能就被关掉了。
yunyu97 2015-10-08
  • 打赏
  • 举报
回复
顶起,求解!
__sumile 2015-10-03
  • 打赏
  • 举报
回复
感觉你说的好难,然后我不是很明白什么意思。。
knife_s 2015-10-02
  • 打赏
  • 举报
回复
既然android不提倡在UI线程中进行耗时处理,所以也没有提供象让代码暂停执行一下去响应其他操作的函数
阿飞__ 2015-10-02
  • 打赏
  • 举报
回复
android不是已经明确说明了不能阻塞主线程么,主线程5秒没响应就会弹出ANR 明明有其它实现方法,为什么还非要在主线程中做这种事
yunyu97 2015-10-02
  • 打赏
  • 举报
回复
等待那1%的牛人。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧