android小菜鸟 问一个关于进程的小问题

sike2008 2010-11-01 12:00:51
package com.sike.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class handler extends Activity {
/** Called when the activity is first created. */
Button btn_start;
Button btn_stop;
Handler handle;
ProgressBar bar;
int i = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
bar = (ProgressBar) findViewById(R.id.Bar);
handle = new Handler();

btn_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
bar.setVisibility(View.VISIBLE);
handle.post(updatedata);
}
});
btn_stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
updateBarHandle.removeCallbacks(updatedata);//解除这个进程
}
});

}

Handler updateBarHandle = new Handler() {
public void handleMessage(Message msg) {
bar.setProgress(msg.arg1);
updateBarHandle.post(updatedata);
}
};
// 继承Runnable 就可以定时执行某个程序
Runnable updatedata = new Runnable() {


@Override
public void run() {
i = i + 10;
Message msg = updateBarHandle.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateBarHandle.sendMessage(msg);
if (i == 100) {
updateBarHandle.removeCallbacks(updatedata);
bar.setProgress(0);
}
}
};
}

按照我的想法 每次调用 updatedata 的时候 i都应该是10 可为什么 进度条的值 依然都会增加? 因为我这里每次初始化都是0 进度条的值 不变才对啊! 还有 运行的时候 我想终止这个线程 为什么在我写的这个代码里 不好用呢? 求高手解答!
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sike2008 2010-11-01
  • 打赏
  • 举报
回复
代码贴错了 是这个
其实就是i=0的位置 变一下~
package com.sike.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class handler extends Activity {
/** Called when the activity is first created. */
Button btn_start;
Button btn_stop;
Handler handle;
ProgressBar bar;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
bar = (ProgressBar) findViewById(R.id.Bar);
handle = new Handler();

btn_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
bar.setVisibility(View.VISIBLE);
handle.post(updatedata);
}
});
btn_stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
updateBarHandle.removeCallbacks(updatedata);//解除这个进程
}
});

}

Handler updateBarHandle = new Handler() {
public void handleMessage(Message msg) {
bar.setProgress(msg.arg1);
updateBarHandle.post(updatedata);
}
};
// 继承Runnable 就可以定时执行某个程序
Runnable updatedata = new Runnable() {

int i = 0;
@Override
public void run() {
i = i + 10;
Message msg = updateBarHandle.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateBarHandle.sendMessage(msg);
if (i == 100) {
updateBarHandle.removeCallbacks(updatedata);
bar.setProgress(0);
}
}
};
}
sike2008 2010-11-01
  • 打赏
  • 举报
回复
多谢各位额!
爪哇鹅 2010-11-01
  • 打赏
  • 举报
回复
关于为何没法终止,这个我没试过。我想是因为用post方法时候其实并没有另开一个线程,而是和activity是同一个线程,这样的话如果线程能被终止,那么activity也被终止了。所以用这个方法没法终止线程吧。
爪哇鹅 2010-11-01
  • 打赏
  • 举报
回复

package com.sike.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class handler extends Activity {
/** Called when the activity is first created. */
Button btn_start;
Button btn_stop;
//Handler handle;
ProgressBar bar;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
bar = (ProgressBar) findViewById(R.id.Bar);
//handle = new Handler();这个handler对象是多余的。

btn_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
bar.setVisibility(View.VISIBLE);
updateBarHandle .post(updatedata);//这里用updateBarHandle
}
});
btn_stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
updateBarHandle.removeCallbacks(updatedata);//解除这个进程
}
});

}

Handler updateBarHandle = new Handler() {
public void handleMessage(Message msg) {
bar.setProgress(msg.arg1);
updateBarHandle.post(updatedata);
}
};
// 继承Runnable 就可以定时执行某个程序
Runnable updatedata = new Runnable() {

int i = 0;
@Override
public void run() {
i = i + 10;
Message msg = updateBarHandle.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateBarHandle.sendMessage(msg);
if (i == bar.getMax()) { //这里最好用bar.getMax()
updateBarHandle.removeCallbacks(updatedata);
bar.setProgress(0);
}
}
};
}

80,490

社区成员

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

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