我正在使用服务从网上下载大量文件。但是当文件被下载时,我无法与应用程序进行交互。什么是最好的方法。 我正在下载大约10 MB的文件,我希望用户在下载文件时与应用互动 请找到我的服务代码。
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 :(得分:3)
我认为你在UI线程上执行非常大的操作,比如下载文件.. ANR
来自UI线程执行长时间运行的操作..使用AsynchTask
或线程执行它..然后你可以避免ANR
..
在AsynchTask示例中查看此链接以获取下载文件。AsynckTask example
答案 1 :(得分:1)
您可以使用IntentService
代替Service
。 IntentService
使用单独的线程来处理意图。所以它不会阻止你的主线程。服务的onStartCommand
方法在主线程中运行并阻塞它太长时间并导致ANR。