2014-09-17 5 views
0

Я пытаюсь повторно инициировать всю функцию загрузки и uppdate-сервиса, когда AsyncTask в моей активности вызывается, но я не уверен, что я делаю что-то неправильно. В настоящее время у меня есть кнопка обновления, который инициирует AsyncTask:Android Refreshing Service после AsyncTask

Обновить функцию, которая инициирует AsyncTask:

final ImageView refreshBtn= (ImageView) findViewById(R.id.spin_refresh); 
    Log.i("RootActivity:setupHeader","******ImageView refreshBtn******"); 
    //Listening to Button Click by User 
    refreshBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Log.i("RootActivity:setupHeader","******OnClick,Call RefreshTask******"); 
      //CALL ON THE CLASS OF REFRESHTASK ASYNCTASK 
      RefreshTask refreshtask = new RefreshTask(); 
      refreshtask.execute(); 
     } 
    }); 

После того, как моя функция обновления называется, он будет вызывать на refreshtask в моей деятельности:

public class RefreshTask extends AsyncTask <Void,Integer,Long> implements Observer{ 
// SET THE PARAMETERS FOR REFRESHTASK IN ASYNCTASK: PRE-EXECUTION, PROGRESS UPDATES & POST-EXECUTION  

private Context context=null; 
private DownloadService callback =null; 
protected boolean exitAsync = false; 
public static Hashtable<String, Download> downloadList; 
final public static String PATH = "/sdcard/DCIM/100MEDIA/"; 
private static final Long START_STICKY = null; 
Intent intent; 
ListView lv; 
RelativeLayout rl; 
protected String dSResponse = null; 

public void UIThreadProgress(Context context, DownloadService callback) { 
     this.context = context; 
     this.DownloadService = DownloadService; 
    } 
//PROCESS IN CALLING THE DOWNLIST WHILE IN BACKGROUND 
protected Long doInBackground(Void...params){ 

    // TODO Auto-generated method stub 
    Log.i("----------RefreshAsyncTask----------", "doInBackground"); 

    try { 
     // ====================DownloadService 
     Thread.sleep(10000); 
     while (this.callback.condition()) 
     Intent i= new Intent(context.this, UpdateService.class); 
     Intent I= new Intent(context.this,DownloadService.class); 
     // potentially add data to the intent 
     context.this.startService(i); 
     } catch (InterruptedException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
    }while (!exitAsync);  
    return START_STICKY; 
} 

@Override 
public void update(Observable observable, Object data) { 
    // TODO Auto-generated method stub 
    //UpdateServiceStatus 
} 

//HANDLES EVENTS ON THE UI-POST-EXECUTE 
@Override 
protected void onPostExecute(Long result){ 
    super.onPostExecute(result); 
    lv.findViewById(R.id.spin_refresh).setVisibility(View.VISIBLE); 
    Log.i("----------RefreshAsyncTask----------", "onPostExecute"); 
    //GIVE FEEDBACK ON THE USER INTERFACE 
    Toast.makeText(context, "Your document has been refreshed and contains the updated documents!", Toast.LENGTH_LONG).show(); 
    // After the process in doInBackground has been completed 
} 

} 

Пожалуйста, помогите, я пытаюсь повторно создать экземпляр службы загрузки и обновления при вызове AsyncTask.

+0

Чувак, если AsyncTask было сделано при условии, что будет прекращено только тогда, когда оба ваших UpdateService и заканчивается там Сервис загрузки работу, то вы так неправильно здесь. сначала ваш AsyncTask будет termniate сразу после запуска службы, поэтому, имея AsyncTask, просто чтобы запустить пару служебных звуков, лишних для меня. – Techfist

+0

@Techfist UpdateService и DownloadService запускаются только один раз, то есть когда приложение запускается впервые. Следовательно, я пытаюсь использовать AsyncTask для вызова другого вызова функции из DownloadService и UPdateService, когда нажата кнопка обновления. –

+0

@Techfist Как Async завершает работу, когда я попытался вызвать 2 сервера для запуска в фоновом режиме? –

ответ

0

Я не понимаю, почему вы начинаете сервис внутри потока. Вместо этого вы должны запустить поток в службе. Проверка локального образца обслуживания в этой ссылке:

http://developer.android.com/reference/android/app/Service.html

В вашем onClickListener просто UNBIND службы и связать его снова. Он обновит вашу службу. В onCreate метод вашего сервиса начнет загрузку или обновление в потоке.

Примечание: Лучше использовать другой механизм нити для сетевого обслуживания. AsyncTask хорош для краткосрочных операций.

+0

onClickService, просто используется для запуска вызов функции кнопки обновления –

+0

Что вы имеете в виду с onClickService? –

+0

Мне жаль, я имел в виду onClickListener –

0
@Override 
protected void onPostExecute(Long result){ 
super.onPostExecute(result); 
lv.findViewById(R.id.spin_refresh).setVisibility(View.VISIBLE); 
Log.i("----------RefreshAsyncTask----------", "onPostExecute"); 
//GIVE FEEDBACK ON THE USER INTERFACE 
Toast.makeText(context, "Your document has been refreshed and contains the updated  documents!", Toast.LENGTH_LONG).show(); 

RefreshTask refreshtask = new RefreshTask(); 
     refreshtask.execute(); 
// After the process in doInBackground has been completed 
} 
+0

Я не понимаю причину для вас, чтобы поставить refresh.execute на onPostExecute –

Смежные вопросы