当我开始服务时ANR

时间:2013-11-07 06:40:28

标签: android android-service

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


    }

2 个答案:

答案 0 :(得分:3)

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

在AsynchTask示例中查看此链接以获取下载文件。AsynckTask example

答案 1 :(得分:1)

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