0

我正在使用一项服务从网络上下载大量文件。但是在下载文件时,我无法与该应用程序进行交互。什么是最好的方法。 我正在下载大约 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();
        }


    }
4

2 回答 2

3

我认为您正在 UI 线程上执行非常大的操作,例如下载文件。ANR当 UI 线程执行长时间运行的操作时。尝试使用AsynchTask或线程来执行它。然后你可以避免ANR..

检查此链接以获取 AsynchTask 示例中的下载文件.. AsynckTask 示例

于 2013-11-07T06:44:32.017 回答
1

您可以使用IntentService而不是Service. IntentService使用单独的线程来处理意图。所以它不会阻塞你的主线程。onStartCommand您的服务的方法在主线程中运行并阻塞它太长时间并导致 ANR。

于 2013-11-07T06:56:54.580 回答