2016-03-31 23 views
1

Döngü, uygulamanızı dondurdu ancak uygulama bittikten sonra, uygulama normal şekilde çalışıyor. Thread'da döngüyü çalıştırmayı denedim ve uygulama dondurmadan çok iyi çalıştı. Ancak sorun şu ki, uygulama çöküyorsa aynı döngüyü tekrar çalıştıramam çünkü Thread'u yeniden başlatamıyoruz. Döngüyü, uygulamayı donduruyor ve tekrar çalıştırılamayacak şekilde çalıştırmak istiyorum. Nasıl yapabilirim? Benim MainActivity sınıftaUygulamamı dondurmadan döngü nasıl çalıştırılır?

Kodu:

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 Ben 0

+3

Yeni konu oluştur her döngü için. – Tokazio

+0

, bir "ExecutorService" oluşturun ve orada büyük döngüler çalıştırın. –

+0

AsyncTask –

cevap

1

Çağrısı yöntemi

private void loopInAnotherThread() { 
    new Thread(new Runnable() { 
     public void run() { 
      // Your loop 
     } 
    }).start(); 
} 
+0

Çok teşekkür ederim adamım! <3 2 günden beri anlamaya çalışıyordum. –

+1

@ShahbazTalpur Kullanıcı her defasında bir düğmeye bastığında yeni bir iş parçacığı oluşturmak bu durumda işe yarayabilir, ancak genel olarak, bir programın arka planda gerçekleştirmek istediği her görev için yeni bir iş parçacığı oluşturması Kötü bir Fikirdir. İplik yaratmak ve yok etmek pahalıdır. Bir "AsyncTask" (Balu SKT tarafından önerildiği gibi) veya bir iş parçacığı havuzu (ör., ThreadPoolExecutor) kullanmak çok daha iyi bir fikir olabilir. –

0

için status ayarlayarak iş parçacığı durdurmak bir button

start.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     status = 1; 
     sendthread.start(); 

} 

başlatılır iç kontrol etmek için bir boole değişken korumak İş parçacığını sonlandırmak için döngü ve bir sonsuz sonsuz döngü.

2

AsyncTask'u kullanmayı deneyin. onPreExecute işlevinde bir ilerleme çubuğu başlatın ve onPostExecute numaralı telefondan cancel numaralı telefonu arayın. doInBackground'un içinde uyku arayabilirsiniz. Bu, uygulamanızı kilitlemeyecek ve uygulama yanıt vermiyormuş gibi hissetmeyeceksiniz.

1

Bir runnable oluşturun, çalışma yönteminde döngülere sahip olacak. Sonra UI iş parçacığına gönderen ikinci bir Runnable yapın. Bundan sonra

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); 
       }); 
     } 
} 

Eğer Runnable kullanarak iş parçacığı oluşturmak ve böylece gibi başlatabilirsiniz: Döngü oluşturmak istediğiniz kadar defalarca

Thread myThread = new Thread(myRunnable); 
myThread.start();