android Service 下载文件

来源:互联网 发布:win7软件联网慢 编辑:程序博客网 时间:2024/04/27 20:45

    我们知道在android中,activity 不能完成长时间的任务,activity调用service是在同一个线程内的,service是可以完成长时间的任务,但它一定要运行在线程中,不能阻塞UI线程,在之前写了一个例子是播放音乐的,表面好似没有用到线程,但在播放音乐时,它里面是用到线程的。所以在下载文件时,要在线程中来完成。这一点要注意,否则理解service会有一定的困难。      

 看看service中的代码怎么来写:

       public class DownService extends Service {

@Override

public void onCreate() {

}

       class ThreadDemo extends Thread{

@Override

public void run() {

 String urlStr="http://192.168.1.105:8080/test/down.txt";  

          try {  

              /* 

               * 通过URL取得HttpURLConnection 

               * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置 

               * <uses-permission android:name="android.permission.INTERNET" /> 

               */  

              URL url=new URL(urlStr);  

              HttpURLConnection conn=(HttpURLConnection)url.openConnection();  

              //取得inputStream,并进行读取  

              InputStream input=conn.getInputStream();  

              BufferedReader in=new BufferedReader(new InputStreamReader(input));  

              String line=null;  

              StringBuffer sb=new StringBuffer();  

              while((line=in.readLine())!=null){  

                  sb.append(line);  

              }  

              System.out.println("data:"+sb.toString());  

                

          } catch (MalformedURLException e) {  

              e.printStackTrace();  

          } catch (IOException e) {  

              e.printStackTrace();  

          }  

}

}

@Override

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

System.out.println("****start********");

new ThreadDemo().start();

return super.onStartCommand(intent, flags, startId);

}

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

}

剩下的就在activity中直接启动服务即可了,startservice()。

原创粉丝点击