2012-05-24 2 views
3

Хотелось бы, чтобы этот код работал в фоновом режиме. Я не могу понять, как создать службу или Asynstask, как большинство из них указало бы, потому что это должен быть только этот код, а не все остальное.Сделать код в фоновом режиме

void StartTimer() 
{ 
    int minsTicks=CountM*60*1000; 
    int hoursTicks=CountT*60*60*1000; 
    int totalTicks=hoursTicks+minsTicks; 
    mTextField = (TextView) findViewById(R.id.TimerTextView); 

    CountDownTimer aCounter = new CountDownTimer(totalTicks, 1000) 
    { 
     public void onTick(long millisUntilFinished) 
     { 
      mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
     } 
     public void onFinish() 
     { 
      try 
      { 
      mTextField.setText("Kaffe Maskinen er igang"); 
      mmOutputStream.write('2'); 
      Thread.sleep(900000); 
      mmOutputStream.write('0'); 
      mTextField.setText("Kaffe Maskinen er slukket"); 
      } 
      catch (IOException e) {} catch (InterruptedException e) {} 
     } 
    }; 
    aCounter.start(); 
} 
+0

Посмотрите [здесь] (http://developer.android.com/resources/articles/painless-threading.html) в документе Android. Это объяснит вам все, что вам нужно. –

+0

Спасибо, но мне понадобилось некоторое объяснение кода. –

ответ

8

Вот фрагмент кода для AsyncTask

private class AsyncTaskEx extends AsyncTask<Void, Void, Void> { 

    /** The system calls this to perform work in a worker thread and 
    * delivers it the parameters given to AsyncTask.execute() */ 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     StartTimer();//call your method here it will run in background 
     return null; 
    } 

    /** The system calls this to perform work in the UI thread and delivers 
    * the result from doInBackground() */ 
    @Override 
    protected void onPostExecute(Void result) { 
     //Write some code you want to execute on UI after doInBackground() completes 
     return ; 
    } 

    @Override 
    protected void onPreExecute() { 
     //Write some code you want to execute on UI before doInBackground() starts 
     return ; 
    } 
} 

Написать этот класс внутри Activity и позвонить, где вы хотите выполнить ваш метод

new AsyncTaskEx().execute(); 
+0

Спасибо, только что мне нужно :) –

2

Вы можете выполнить свой код в фоновом режиме, как это:

private class GetLoginResponse extends AsyncTask<Void, Void, Boolean> { 

    @Override 
    protected void onPreExecute() { 
     // whatever code u want to execute before background code 
     // starts executing 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 

     int minsTicks=CountM*60*1000; 
     int hoursTicks=CountT*60*60*1000; 
     int totalTicks=hoursTicks+minsTicks; 
     mTextField = (TextView) findViewById(R.id.TimerTextView); 

     CountDownTimer aCounter = new CountDownTimer(totalTicks, 1000) { 

      public void onTick(long millisUntilFinished) { 
       mTextField.setText("seconds remaining: " 
          + millisUntilFinished/1000); 
      } 

      public void onFinish() { 
       try { 
        mTextField.setText("Kaffe Maskinen er igang"); 
        mmOutputStream.write('2'); 
        Thread.sleep(900000); 
        mmOutputStream.write('0'); 
        mTextField.setText("Kaffe Maskinen er slukket"); 
       } catch (IOException e) { 
       } catch (InterruptedException e) { 
       } 
      } 
     }; 

     aCounter.start(); 
    } 

    @Override 
    protected void onPostExecute(Boolean data) { 
     // Here you can execute what you want to execute 
     // after the background task completes 
    } 
}// end AsyncTask 

new GetLoginResponse.execute();