2015-04-23 8 views
0

Я загружаю объекты (видео) из aws s3 bucket. После того, как я называю:Aws TransferManager останавливается, когда я принудительно закрываю приложение

TransferManager transferManager = new TransferManager(s3client); 
     GetObjectRequest getRequest = new GetObjectRequest(bucket, entity.getName()); 
      String s=""; 
      download = transferManager.download(bucket, entity.getName(), f); 

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

НО если и заставить закрыть (значит я долго прижимаю домой кнопку и закрыть мое приложение от запуска списка) мое приложение все объекты останавливает загрузку

Каковы способы, чтобы сделать загрузку работает на спине, даже если остановки приложения ...


Я попытался с обслуживанием, а также:

public class MyDownloadingService extends Service { 
    public static Download download; 
    File f; 
    public static ArrayList<DownloadEntity> downloadList; 
    public class LocalBinder extends Binder { 
     public MyDownloadingService getService() { 
      return MyDownloadingService.this; 
     } 
    } 

    private final LocalBinder mBinder = new LocalBinder(); 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     // downloadList=new ArrayList<DownloadEntity>(); 
     //Toast.makeText(this, "Service Created", 300); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     //Toast.makeText(this,"Service Destroy",300); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     //Toast.makeText(this, "Service LowMemory", 300); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     // Toast.makeText(this,"task perform in service",300); 
     if (intent!=null) { 
      String bucket = "", object = "", file = ""; 
      if (intent.getExtras() != null) { 

       if (intent.getExtras().getString("bucket") != null) { 
        bucket = intent.getExtras().getString("bucket"); 
       } 
       if (intent.getExtras().getString("object") != null) { 
        object = intent.getExtras().getString("object"); 
       } 
       if (intent.getExtras().getString("file") != null) { 
        file = intent.getExtras().getString("file"); 
       } 
       new downloader(bucket, object, file).execute(); 
      } 
     } 
     return android.app.Service.START_STICKY; 
    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 
public static void getList(){ 
    if (downloadList!=null) { 
     SoapCostants.downloadList = downloadList; 
    } 
} 
    public class downloader extends AsyncTask<String, String, String> { 
     String bucket,object; 
     String file; 

     public downloader(String bucket,String object,String file) { 
      this.object=object; 
      this.file=file; 
      this.bucket=bucket; 

     } 
     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 


     } 
     @Override 
     protected String doInBackground(String... params) { 
      File f=new File(file); 
      // Toast.makeText(this,"Service start",300); 
      TransferManager transferManager = new TransferManager(S3Getter.s3client); 
      try { 

       GetObjectRequest getRequest = new GetObjectRequest(bucket, object); 

       String s=""; 
       download = transferManager.download(bucket, object, f); 
       DownloadEntity entity2=new DownloadEntity(); 
       entity2.setKey(object); 
       entity2.setValue(download); 
       if (downloadList==null){ 
        downloadList=new ArrayList<DownloadEntity>(); 
       } 
       SoapCostants.downloadList.add(entity2); 
       downloadList.add(entity2); 
       for (int i = 0; i < SoapCostants.downloadedList.size(); i++) { 
        //SoapCostants.downloadedList 
        if (object.equalsIgnoreCase(SoapCostants.downloadedList.get(i).getName())) { 
         SoapCostants.downloadedList.get(i).setIsDownloading("yes"); 
        } 
       } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

     } 
    } 
} 

я использовал start_sticky услуг. Но если мое приложение долгое время находилось в фоновом режиме, оно закрывается. или когда я закрою свое приложение, оно закрывается. Я проверил его, вызвав getList() класса обслуживания выше. Но он возвращает null.

+0

Пожалуйста, объясните ** точно **, что вы подразумеваете под «force close» здесь. – CommonsWare

+0

Force close означает завершение приложения из запущенных задач – Vinay

ответ

1

TransferManager размещен в вашем приложении. После того, как приложение будет убито, все, что ему принадлежит, также будет убито, включая TransferManager. Когда TransferManager убит, он вызывает shutdown() в finalized(), чтобы завершить все передачи, запущенные в пуле потоков. Если вы действительно хотите, чтобы он продолжал работать, тогда вам лучше попробовать Службу, которая может выжить после завершения приложения. См. http://developer.android.com/guide/components/services.html для получения более подробной информации.

+0

Я попытался использовать сервисы для загрузки. Я использовал start_sticky для служб. Но если мое приложение долгое время находилось в фоновом режиме, оно закрывается. вы можете предложить? – Vinay

+0

см. Мое редактирование – Vinay

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