[英]How to run loop without freezing my app?
循環凍結了我的應用程序,但完成后,應用程序可以正常工作。 我嘗試在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
來停止線程
嘗試使用AsyncTask
。 開始在進度onPreExecute
功能,並呼吁cancel
在onPostExecute
。 在doInBackground
內部,您可以調用sleep。 這不會使您的應用程序崩潰,並且您不會覺得該應用程序沒有響應。
創建一個Runnable,它將在其run方法中具有循環的代碼。 然后制作第二個Runnable,發布到UI線程。
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();
想要多次循環調用該方法
private void loopInAnotherThread() {
new Thread(new Runnable() {
public void run() {
// Your loop
}
}).start();
}
維護布爾值變量以控制內部循環,並保持外部無限循環以阻止線程終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.