private Runnable updateThread = new Runnable() {
int i = 0; @Override
public void run() {
Log.d(TAG, "Begin Thread ->" + i);
i = i + 10;
// 得到一个消息对象,Message类是由Android操作系统提供
Message msg = updateBarHandler.obtainMessage();
// 将message对象的arg1参数的值设置为i
// 用arg1和arg2两个成员变量传递消息,系统性能消耗少
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();// 在命令行打印异常信息在程序中出错的位置及原因
}
// 将message对象加入到消息队列中
updateBarHandler.sendMessage(msg);
if (i == 100) {
// 如果当i的值为100时,将线程对象从handler中移除
Log.d(TAG, "removeCallbacks updateThread");
updateBarHandler.removeCallbacks(updateThread);
// 返回主界面
Intent i = new Intent(PBarDisplay.this, MainActivity.class);
PBarDisplay.this.startActivity(i);
PBarDisplay.this.finish();
}
}
};学习handler功能 写了个进度条 进度条关闭后 做了
PBarDisplay.this.startActivity(i);
PBarDisplay.this.finish();
跳转到初始activity并关闭当前activity 但是后台打印Log.d(TAG, "Begin Thread ->" + i);
一直有 是什么原因呢android线程
int i = 0; @Override
public void run() {
Log.d(TAG, "Begin Thread ->" + i);
i = i + 10;
// 得到一个消息对象,Message类是由Android操作系统提供
Message msg = updateBarHandler.obtainMessage();
// 将message对象的arg1参数的值设置为i
// 用arg1和arg2两个成员变量传递消息,系统性能消耗少
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();// 在命令行打印异常信息在程序中出错的位置及原因
}
// 将message对象加入到消息队列中
updateBarHandler.sendMessage(msg);
if (i == 100) {
// 如果当i的值为100时,将线程对象从handler中移除
Log.d(TAG, "removeCallbacks updateThread");
updateBarHandler.removeCallbacks(updateThread);
// 返回主界面
Intent i = new Intent(PBarDisplay.this, MainActivity.class);
PBarDisplay.this.startActivity(i);
PBarDisplay.this.finish();
}
}
};学习handler功能 写了个进度条 进度条关闭后 做了
PBarDisplay.this.startActivity(i);
PBarDisplay.this.finish();
跳转到初始activity并关闭当前activity 但是后台打印Log.d(TAG, "Begin Thread ->" + i);
一直有 是什么原因呢android线程
解决方案 »
- button或者imageview按下的时候变小,松开后还原 急急急。。在线等。
- Hierarchy Viewer查看Android应用Option Menu时MenuItem id错误
- android计算器源代码
- android 类似数码管显示
- android QuickContactBadge里面函数的作用
- android src目录下配置文件的能写入么?
- android难题:如何通过intent传递另一个intent
- Android的jni层如何加载bmp位图
- 安卓 APP 个推 总是返回not_auth是什么原因
- 招聘android高级开发-苏州昆山
- android 批量添加联系人,急!!!
- 如何获得浏览器的历史访问记录
还有把你的代码颜色怎么弄成那鬼样,看起来真累
package com.yigedou.app;import android.util.Log;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.ProgressBar;import com.yigedou.helloworld.MainActivity;
import com.yigedou.helloworld.R;public class PBarDisplay extends Activity {
private static final String TAG = "PBarDisplay";
private UpdateBarHandler updateBarHandler;
private ProgressBar progressBar; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
// 显示界面布局
setContentView(R.layout.activity_pbar);
// 设置进度条可见
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setVisibility(View.VISIBLE); // 生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供
HandlerThread handlerThread = new HandlerThread("handler_thread");
// 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
handlerThread.start();
updateBarHandler = new UpdateBarHandler(handlerThread.getLooper());
// 将线程updateThread发送到updateBarHandler中
updateBarHandler.post(updateThread);
} // 创建自定义的继承与Handler类的子类,其中实现一个参数为Looper对象的构造方法,方法内容调用父类的构造方法即可。
private class UpdateBarHandler extends Handler {
// 以Looper类型参数传递的函数,Looper为消息泵,不断循环的从消息队列中得到消息并处理,因此
// 每个消息队列都有一个Looper,因为Looper是已经封装好了的消息队列和消息循环的类
public UpdateBarHandler(Looper looper) {
// 调用父类的构造函数
super(looper);
} @Override
public void handleMessage(Message msg) {
progressBar.setProgress(msg.arg1);
updateBarHandler.post(updateThread);
super.handleMessage(msg);
}
} // 线程类,该类使用匿名内部类的方式进行声明
private Runnable updateThread = new Runnable() {
int i = 0; @Override
public void run() {
Log.d(TAG, "Begin Thread ->" + i);
i = i + 10;
// 得到一个消息对象,Message类是由Android操作系统提供
Message msg = updateBarHandler.obtainMessage();
// 将message对象的arg1参数的值设置为i
// 用arg1和arg2两个成员变量传递消息,系统性能消耗少
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();// 在命令行打印异常信息在程序中出错的位置及原因
}
// 将message对象加入到消息队列中
updateBarHandler.sendMessage(msg);
if (i == 100) {
// 如果当i的值为100时,将线程对象从handler中移除
Log.d(TAG, "removeCallbacks updateThread");
updateBarHandler.removeCallbacks(updateThread);
// 返回主界面
Intent i = new Intent(PBarDisplay.this, MainActivity.class);
PBarDisplay.this.startActivity(i);
PBarDisplay.this.finish();
}
}
};}把代码重新贴下
把退出操作放在handleMessage就可以了 但不知道在run里面直接修改有没有什么好办法另外handleMessage提示This Handler class should be static or leaks might occur 也是个麻烦的事情
百度上看说要用弱引用 也是看得云里雾里 有没大虾帮忙解释下
{
....
}else
{
updateBarHandler.sendMessage(msg);
}
看了被人的解决方法 private final WeakReference<Activity> mActivity;
public MyHandler(Activity activity) {
mActivity = new WeakReference<Activity>(activity);
} 问题现在是原来我里面已经有了public UpdateBarHandler(Looper looper) {
// 调用父类的构造函数
super(looper);
}是不是冲突了 有没有什么好办法 或者不应该这样写?
static class UpdateBarHandler extends Handler {
private final WeakReference<PBarDisplay> mActivity; public UpdateBarHandler(PBarDisplay activity) {
mActivity = new WeakReference<PBarDisplay>(activity);
}
// 以Looper类型参数传递的函数,Looper为消息泵,不断循环的从消息队列中得到消息并处理,因此
// 每个消息队列都有一个Looper,因为Looper是已经封装好了的消息队列和消息循环的类
public UpdateBarHandler(Looper looper) {
// 调用父类的构造函数
super(looper);
} @Override
public void handleMessage(Message msg) {
// 从消息队列中得msg的一个成员
PBarDisplay activity = mActivity.get();
activity.setProgress(msg.arg1);
activity.updateBarHandler.post(activity.updateThread);
super.handleMessage(msg);
}
}