توقف یک رشته و ادامه ی کار !
ما دستورات | Thread.stop | Start | destroy و .. رو داریم ، ولی واقعا هیچ کدوم کار نمیکنه ! وقتی استفاده میشن برنامه کرش میکنه !
خالا قصد کنترل رشته رو با متغییری داشتم ، که وقتی یه بار false میشه ، دیگه اون While داخل رشته اجرا نمیشه !
و چند حقه ی دیگه که نگرفت ! ، توی Stack از یه کلاس که از Thread اکستندز شده بود استفاده کرده بودن ولی به درد من نخورد و متوجه نحوه ی کارش نشدم و نتونستم ازش استفاده کنم
لطفا دوستانی که میخوان سورس بزارن ، سورس یه ترد که مقدار یه شمارنده رو چاپ کنه و با کلیک رویه یه دکمه puase و resume بشه رو بزارید ، یعنی ثانیه شماری که قابلیت توقف و شروع مجدد داشته باشه !
سلام خوبی دوست عزیز من چند وقتی میشد سری به پروژم نزده بودم ولی امروز به خاطر شما و سوالی که کردی منو برگردوند سر پروژم
متن زیر شیوه منه هرچند خیلی شاید بی سواد وار باشه
کلاس تردم که خیلی شبیه استاده
public class ThreadCounter extends Thread {
public static int seconds;
private static int counter;
private TextView textView;
public static boolean pauseThread;
public static boolean stopThread;
public void stopThread(int value) {
if (value == 0) {
stopThread = true;
} else if (value == 1) {
stopThread = false;
}
}
public void pauseThread(int value) {
if (value == 0) {
pauseThread = true;
} else if (value == 1) {
pauseThread = false;
}
}
public void setSeconds(int value) {
sec>
counter = seconds;
}
public void setTextView(TextView value) {
textView = value;
}
@Override
public void run() {
super.run();
while (counter > 0 && stopThread) {
if (pauseThread) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
counter--;
if (textView != null) {
G.HANDLER.post(new Runnable() {
@Override
public void run() {
int min = (int) Math.floor(counter / 60);
int sec = counter % 60;
String minPrefix = "";
if (min < 10) {
minPrefix = "0";
}
String secPrefix = "";
if (sec < 10) {
secPrefix = "0";
}
Log.i("LOG", "Counter: " + counter);
textView.setText(minPrefix + min + ":" + secPrefix + sec);
}
});
}
}
}
G.HANDLER.post(new Runnable() {
@Override
public void run() {
if (stopThread == true) {
Toast.makeText(G.context, "وقت شما تمام شده است", Toast.LENGTH_SHORT).show();
}
}
});
}
}
اینم یه دیالوگه سه تا دکمه داره ok برای بستن دیالوک و...
TextView btnTimeOk = (TextView) timeDialog.findViewById(R.id.btnTimeOk);
TextView btnTimePause = (TextView) timeDialog.findViewById(R.id.btnTimePause);
TextView btnTimeResume = (TextView) timeDialog.findViewById(R.id.btnTimeResume);
final TextView txtTime = (TextView) timeDialog.findViewById(R.id.txtTimeDialog);
btnTimeResume.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (ThreadCounter.pauseThread == false) {
counter.pauseThread(0);
}
}
});
btnTimePause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (ThreadCounter.pauseThread == true) {
counter.pauseThread(1);
}
}
});
btnTimeOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
timeDialog.dismiss();
}
});
counter.stopThread(0);
counter.pauseThread(0);
counter.setSeconds(100);
counter.setTextView(txtTime);
counter.start();
متد و فیلد threadStop برای دکمه back نوشتم
راستی یه سوال اگه خواستی جواب بده چند سالته کمی از خودت بگو دوس دارم آشناتر شم باهات اگه خواستی من خطو جمعه حذف میکنم
package ir.negano;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class main extends Activity {
int value;
Boolean state = false;
Thread counterThread = new Thread();
private void checkThread()
{
counterThread = new Thread(new Runnable() {
@Override
public void run() {
while (state)
{
Log.i("negano", "value is " + value);
value++;
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
counterThread.start();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnswitch = (Button) findViewById(R.id.btnswitch);
btnswitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
state = !state;
checkThread();
}
});
}
}
اینم سورس کامل توقف رشته ، فقط یه باتن ایجاد کنید ، ایدی بدید و لاگ رو ببینید !
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .