循环冻结我的应用程序,但在完成后,应用程序正常工作。我尝试在Thread
中运行循环,它在没有冻结应用程序的情况下运行良好。但现在的问题是,如果我执行应用程序崩溃,我无法再次运行相同的循环,因为我们无法重新启动Thread
。我希望以一种不冻结应用程序并且可以再次运行的方式运行循环。我该怎么办?
我的MainActivity
课程中的代码:
protected Thread sendthread;
@Override
protected void onCreate(Bundle savedInstanceState) {
sendthread = new Thread(new Runnable () {
@Override
public void run() {
for(int i=0;i<amount;i++){
if (status == 0){
break;
}
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber.getText().toString(),null,messagetoSend, null, null);
}
}
});
}
Thread
由button
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
status = 1;
sendthread.start();
}
我通过将status
设置为0
答案 0 :(得分:2)
尝试使用AsyncTask
。在onPreExecute
功能中启动进度条,然后在cancel
中致电onPostExecute
。在doInBackground
里面你可以叫睡觉。这不会导致您的应用崩溃,您也不会觉得应用没有响应。
答案 1 :(得分:1)
创建一个Runnable,它将具有在其run方法中循环的代码。然后创建一个发布到UI线程的第二个Runnable。
Runnable myRunnable = new Runnable() {
@Override
public void run() {
while (testByte == 0) {
Thread.sleep(1000); // 1 Second delay
String updateWords = updateAuto(); // make updateAuto() return a string
myTextView.post(new Runnable() {
@Override
public void run() {
myTextView.setText(updateWords);
});
}
}
之后,您可以使用Runnable创建线程并启动它 像这样:
Thread myThread = new Thread(myRunnable);
myThread.start();
答案 2 :(得分:1)
多次调用方法循环
private void loopInAnotherThread() {
new Thread(new Runnable() {
public void run() {
// Your loop
}
}).start();
}
答案 3 :(得分:0)
维护一个布尔变量来控制内部循环和一个外部无限循环来阻止线程终止。