2013-11-07 6 views
0

Я использую сервис для загрузки тяжелых файлов с web.but, когда файлы загружаются, я не могу взаимодействовать с приложением. Каков наилучший способ для этого. Я загружаю файлы размером около 10 МБ, и я хочу, чтобы пользователь взаимодействовал с приложением во время загрузки файлов. . Код моего сервиса.ANR, когда я начинаю услугу

public static class MyService extends Service { 
     @Override 
     public IBinder onBind(Intent arg0) { 
      return null; 
     } 

     public MyService(){ 
      super(); 
     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      // Let it continue running until it is stopped. 
      System.out.println("service started"); 
      Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
      //Toast.makeText(Description.this, "Downloading content...", Toast.LENGTH_LONG); 

      GetShowsInfo(downloadEpisodeMedia(episode_id)); 
      RequestDownloads(); 


      File cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"Folder Name"); 
      listf(cacheDir,files); 
      mediaPlayerflag=true; 
      //progressBarLayout.setVisibility(LinearLayout.VISIBLE); 

      nowPlayingEpisode=categoryName; 
      //NowPlayingEpisode.setText("Now Playing "+episodeArrayList.get(position).getName()); 

      textView_MediaPlayer.setText(nowPlayingEpisode); 
      //textView_EpisodeCount.setText(episodeCount); 
      playOnebyOneMedia(); 

      // StoreInfo(GetCategories()); 
      //StoreDescription(GetDescription()); 
      return START_STICKY; 
     } 
     @Override 
     public void onDestroy() { 
      System.out.println("service stopped"); 
      super.onDestroy(); 
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 
     } 


    } 
+0

Добавить сообщение logcat и почему вы делаете textView_MediaPlayer.setText из службы? –

+0

Я думаю, что вместо обслуживания вы должны подумать об asynctask .. –

+0

Я загружаю файлы размером около 10 МБ, и я хочу, чтобы пользователь взаимодействовал с приложением при загрузке файлов – onkar

ответ

1

Вы можете использовать IntentService вместо Service. IntentService использует отдельный поток для обработки намерений. Таким образом, он не будет блокировать ваш основной поток. onStartCommand метод вашего обслуживания запускается в основном потоке и блокирует его слишком долго и вызывает ANR.

3

Я думаю, что вы выполняете очень крупные операции в потоке пользовательского интерфейса, как загрузки файлов .. ANR приходит, когда поток пользовательского интерфейса выполнить долго работает operations..try, чтобы сделать это с помощью AsynchTask или threads..then вас можно избежать ANR ..

проверить эту ссылку для загрузки файла в примере AsynchTask .. AsynckTask example

+0

Я загружаю файлы размером около 10 МБ, а я хотите, чтобы пользователь взаимодействовал с приложением во время загрузки файлов. – onkar

+0

Затем используйте AsynchTask для загрузки файлов в doInBackground(). –

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