Android疑问1——Handler的removeCallbacks方法无效?(已经明白了)
16lz
2021-01-26
刚在做复习时发现了一个问题,加入了Handler的线程,即使调用了removeCallbacks线程还是存在,而且退出了Activity之后线程还在运行。难道是removeCallBacks无效?还是我哪里写错了?
package cfuture09.handlerProgress;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class HandlerProgressActivity extends Activity {Button start;ProgressBar progressBar;Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubprogressBar.setProgress(msg.arg1);handler.post(r);}};Runnable r = new Runnable() {int i = 0;@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("Begin thread");i += 10;Message msg = handler.obtainMessage();msg.arg1 = i;try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//if ( i < 100) { handler.sendMessage(msg);//}if ( i >= 100) {handler.removeCallbacks(r);System.out.println("end");}}}; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button) findViewById(R.id.start); progressBar = (ProgressBar) findViewById(R.id.progress); start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubprogressBar.setVisibility(ProgressBar.VISIBLE);handler.post(r);}}); }}
刚和一个同学聊天说到这一段,跟他一说,忽然之间自己想明白了。原来还是代码的逻辑错误。这段代码我是看视频写的,可能视频的作者在写这段代码时也没注意到这个问题。在看了之后的视频我才想明白。聊天记录用图片贴上来吧。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- android webview中使用Java调用JavaScript方法并获取返回值
- Android 读取元素的数据
- 快速实现android手机端多人视频会议直播(免费)
- Android中Activity常用功能设置小结(包括全屏、横竖屏等)
- android Looper Message 代码分析
- Android(安卓)FFmpeg系列——3 C多线程使用
- Android源码50例汇总,欢迎各位下载 【转载自51CTO】
- 【Android】java.lang.AssertionError use looper thread, must