如果在android中使用runnable,则确定线程是否正在运行
我在android中创建了一个多线程程序 当我点击其中一个按钮时,它的线程开始并将值打印到EditText。现在,我想确定线程是否正在运行,以便我可以在单击时停止线程,如果它正在运行,则启动新线程。这里是mu代码:如果在android中使用runnable,则确定线程是否正在运行,android,multithreading,Android,Multithreading,我在android中创建了一个多线程程序 当我点击其中一个按钮时,它的线程开始并将值打印到EditText。现在,我想确定线程是否正在运行,以便我可以在单击时停止线程,如果它正在运行,则启动新线程。这里是mu代码: public void startProgress(View view) { final String v; if(view == b1) { v = "b1"; } else
public void startProgress(View view) {
final String v;
if(view == b1)
{
v = "b1";
}
else
{
v = "b2";
}
// Do something long
Runnable runnable = new Runnable() {
@Override
public void run() {
//for (int i = 0; i <= 10; i++) {
while(true){
if(v.equals("b1"))
{
i++;
}
else if(v.equals("b2"))
{
j++;
}
try {
if(v.equals("b1"))
{
Thread.sleep(3000);
}
else if(v.equals("b2"))
{
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
// progress.setProgress(value);
if(v.equals("b1"))
{
String strValue = ""+i;
t1.setText(strValue);
}
else
{
String strValue = ""+j;
t2.setText(strValue);
}
//t1.setText(value);
}
});
}
}
};
new Thread(runnable).start();
}
@Override
public void onClick(View v) {
if(v == b1)
{
startProgress(b1);
}
else if(v == b2)
{
startProgress(b2);
}
}
public void startProgress(视图){
最后一串v;
如果(视图==b1)
{
v=“b1”;
}
其他的
{
v=“b2”;
}
//做些长的事情
Runnable Runnable=新的Runnable(){
@凌驾
公开募捐{
//为了(int i=0;i在线程中使用静态AtomicBoolean并相应地翻转其值。如果布尔值为true,则表示线程已在运行。如果为true,则退出线程。退出线程之前,请将该值设置回false。在线程中使用静态AtomicBoolean并相应地翻转其值。如果olean为true,线程已在运行。如果为true,请退出线程。在退出线程之前,请将该值设置回false。有一些方法可以检查线程属性
您可以通过以下方式检查线程是否处于活动状态()
Thread.isAlive()
方法返回布尔值
您可以找到运行的线程
Thread.currentThread().getName()
谢谢有一些方法可以检查线程属性
您可以通过以下方式检查线程是否处于活动状态()
Thread.isAlive()
方法返回布尔值
您可以找到运行的线程
Thread.currentThread().getName()
谢谢你,没有了那些乱七八糟的代码,一个可以完成你所需要的工作,增加了可读性
它甚至还有一个getStatus()
函数
环顾四周,你会发现大量的例子(这里不再赘述)。我只是从上面链接的文档中复制一个:
用法
AsyncTask必须是要使用的子类。该子类将重写至少一个方法(doInBackground(Params…),并且通常会重写第二个方法(onPostExecute(Result))
下面是一个子类化示例:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
而不是混乱的代码,一个将做的工作,你需要增加可读性
它甚至还有一个getStatus()
函数
环顾四周,你会发现大量的例子(这里不再赘述)。我只是从上面链接的文档中复制一个:
用法
AsyncTask必须是要使用的子类。该子类将重写至少一个方法(doInBackground(Params…),并且通常会重写第二个方法(onPostExecute(Result))
下面是一个子类化示例:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
我正在考虑一些特定于线程的方法,用这个解决方案做同样的事情是非常可能的。谢谢你的帮助..我正在考虑一些特定于线程的方法,用这个解决方案做同样的事情是非常可能的。谢谢你的帮助。。