Android应用开发(简单易懂,求加精!)

社区服务
高级搜索
猴岛论坛手机数码Android应用开发(简单易懂,求加精!)
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
9个回复

Android应用开发(简单易懂,求加精!)

楼层直达
云腾丶

ZxID:16006911

等级: 大将
道,可道,非常道。名,可名,非常名。

举报 只看楼主 使用道具 楼主   发表于: 2014-02-02 0
大家都知道Android平台现在特别的火,分享一个简单的Android应用开发吧,简单、明了、易学习,希望管理们加精哦!

一、Android平台的架构
首先说下Android的框架分为一下四层:kernel、libraries、framework、applications
1. 最低层是linux kernel,主要负责内存管理、进程调度等系统管理以及终端的硬件驱动。Binder driver,google为android设计的一个增强系统的进程间通信能力的模块。

2. Kernel的上一层是libraries,包含了核心库、第三方库和android虚拟机。android并没有直接采用传统的j2se或j2me的java虚拟机,而是自己建立了一个称为dalvik的虚拟机,号称更节省字节码的空间,性能更好。但这也成为了google与sun关于java版权争议点。

以上两层是采用C语言或汇编语言实现的。

3. Framework是android为应用开发者设计的一套软件框架,提供了丰富的api和一些现成的开发元素。Framework是采用java语言实现的。在NDK出来之前,android应用开发者基本上只能用java来开发应用。
Android使用JNI(Java Native Interface )连接了libraries和framework。

4. Application就是在framework的基础上开发的各种应用。

以上就是android系统的总体框架。那么接下来我们看看各个框架的简单介绍吧。

Linux核心:Android依赖Linux 2.6来提供核心的服务,例如存储管理、进程(Process)管理等
Android Runtime:Java语言层级的Virtual Machine
Libraries:Android里已经提供的C/C++组件。例如,SQLite、OpenGL 3D等。
应用框架(Application Framework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用
应用程序(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。

二、Android环境配置和开发
首先要安装 Android SDK 和Eclipse 插件:
所需开发环境:
JDK 5 或 JDK 6 (仅有JRE不够)
Eclipse 3.5 (galileo)
下载ADT 的Eclipse 插件
http://dl.google.com/android/ADT-0.9.5.zip
安装 Eclipse 插件 (ADT)
启动 Eclipse,选择 Help > Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。
点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android Developer Tools”和 “Android Editors“),点击 Next,最后重启 Eclipse。
下载Android SDK:
http://dl.google.com/android/android-sdk_r18-windows.zip
下载完SDK后,把.zip文件解压到你电脑上合适位置。启动 Eclipse,选择window->preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。


1、打开Eclipse,新建项目(点击FileNewroject),在项目列表中展开Android目录,选择Android Project,如下图:
2、点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用:
点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:

3、在打开的虚拟设备管理器中创建一个虚拟手机:

4、在项目上右键点击run as Android application,如下图:

三、Android应用程序架构src/  java原代码存放目录
gen/ 自动生成目录
gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
res/ 资源(Resource)目录
在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。
AndroidManifest.xml 功能清单文件
这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。
default.properties 项目环境信息,一般是不需要修改此文件。
res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。
res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。
res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:
· strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name=“itcast”>****</string>
</resources>

· arrays.xml 定义数组。
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <string-array name="colors">
                <item>red</item>
                <item>yellow</item>    
                <item>green</item>    
                <item>blue</item>  
        </string-array>
</resources>

· colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下:
      <?xml version="1.0" encoding="UTF-8"?>
<resources>
  <color name="contents_text">#ff000000</color>
</resources>

· dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源
      <?xml version="1.0" encoding="UTF-8"?>
<resources>
  <dimen name="key_height">50dip</dimen>
</resources>

· styles.xml 定义样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <style name="itcastText" parent="@style/Text">
                <item name="android:textSize">18px</item>
                <item name="android:textColor">#008</item>
        </style>
</resources>

res/anim/ 编译成帧动画的XML文件。
res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。
res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。

四、Android应用程序构成
一个android应用程序的框架。
包含了5个部分:activity,service,intent,broadcast receiver,content provider
1、Activity
A visual user interface
通过view管理UI
每一个有用户界面的应用至少包含一个activity
一个应用可以有多个activity,其中一个作为main activity用于启动显示
Activity通过startActivity或startActivityForResult启动另外的activity
2、Activity生命周期
Activity通过onCreate被创建
当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止
当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止
当activity处于pause或者stop状态时,都可能被系统终止并回收。因此,有必要在onPause和onStop方法中将应用程序运行过程中的一些状态,例如用户输入等,保存到持久存储中。如果程序中启动了其他后台线程,也需要注意在这些方法中进行一些处理,例如在线程中打开了一个进度条对话框,如果不在pause或stop中cancel掉线程,则当线程运行完cancel掉对话框时就会抛出异常。
Project:ActivityLifecycle

本帖最后由 chengjinbao 于 2012-10-27 22:59 编辑

大家都知道Android平台现在特别的火,分享一个简单的Android应用开发吧,简单、明了、易学习,希望管理们加精哦!

一、Android平台的架构
首先说下Android的框架分为一下四层:kernel、libraries、framework、applications
1. 最低层是linux kernel,主要负责内存管理、进程调度等系统管理以及终端的硬件驱动。Binder driver,google为android设计的一个增强系统的进程间通信能力的模块。

2. Kernel的上一层是libraries,包含了核心库、第三方库和android虚拟机。android并没有直接采用传统的j2se或j2me的java虚拟机,而是自己建立了一个称为dalvik的虚拟机,号称更节省字节码的空间,性能更好。但这也成为了google与sun关于java版权争议点。

以上两层是采用C语言或汇编语言实现的。

3. Framework是android为应用开发者设计的一套软件框架,提供了丰富的api和一些现成的开发元素。Framework是采用java语言实现的。在NDK出来之前,android应用开发者基本上只能用java来开发应用。
Android使用JNI(Java Native Interface )连接了libraries和framework。

4. Application就是在framework的基础上开发的各种应用。

以上就是android系统的总体框架。那么接下来我们看看各个框架的简单介绍吧。

Linux核心:Android依赖Linux 2.6来提供核心的服务,例如存储管理、进程(Process)管理等
Android Runtime:Java语言层级的Virtual Machine
Libraries:Android里已经提供的C/C++组件。例如,SQLite、OpenGL 3D等。
应用框架(Application Framework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用
应用程序(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。


二、Android环境配置和开发
首先要安装 Android SDK 和Eclipse 插件:
所需开发环境:
JDK 5 或 JDK 6 (仅有JRE不够)
Eclipse 3.5 (galileo)
下载ADT 的Eclipse 插件
http://dl.google.com/android/ADT-0.9.5.zip
安装 Eclipse 插件 (ADT)
启动 Eclipse,选择 Help > Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。
点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android Developer Tools”和 “Android Editors“),点击 Next,最后重启 Eclipse。
下载Android SDK:
http://dl.google.com/android/android-sdk_r18-windows.zip
下载完SDK后,把.zip文件解压到你电脑上合适位置。启动 Eclipse,选择window->preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。


1、打开Eclipse,新建项目(点击FileNewroject),在项目列表中展开Android目录,选择Android Project,如下图:
2、点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用:
点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:

3、在打开的虚拟设备管理器中创建一个虚拟手机:

4、在项目上右键点击run as Android application,如下图:


三、Android应用程序架构src/  java原代码存放目录
gen/ 自动生成目录
gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
res/ 资源(Resource)目录
在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。
AndroidManifest.xml 功能清单文件
这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。
default.properties 项目环境信息,一般是不需要修改此文件。
res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。
res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。
res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:
· strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name=“itcast”>****</string>
</resources>

· arrays.xml 定义数组。
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <string-array name="colors">
                <item>red</item>
                <item>yellow</item>    
                <item>green</item>    
                <item>blue</item>  
        </string-array>
</resources>

· colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下:
      <?xml version="1.0" encoding="UTF-8"?>
<resources>
  <color name="contents_text">#ff000000</color>
</resources>

· dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源
      <?xml version="1.0" encoding="UTF-8"?>
<resources>
  <dimen name="key_height">50dip</dimen>
</resources>

· styles.xml 定义样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <style name="itcastText" parent="@style/Text">
                <item name="android:textSize">18px</item>
                <item name="android:textColor">#008</item>
        </style>
</resources>

res/anim/ 编译成帧动画的XML文件。
res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。
res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。

四、Android应用程序构成
一个android应用程序的框架。
包含了5个部分:activity,service,intent,broadcast receiver,content provider
1、Activity
A visual user interface
通过view管理UI
每一个有用户界面的应用至少包含一个activity
一个应用可以有多个activity,其中一个作为main activity用于启动显示
Activity通过startActivity或startActivityForResult启动另外的activity
2、Activity生命周期
Activity通过onCreate被创建
当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止
当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止
当activity处于pause或者stop状态时,都可能被系统终止并回收。因此,有必要在onPause和onStop方法中将应用程序运行过程中的一些状态,例如用户输入等,保存到持久存储中。如果程序中启动了其他后台线程,也需要注意在这些方法中进行一些处理,例如在线程中打开了一个进度条对话框,如果不在pause或stop中cancel掉线程,则当线程运行完cancel掉对话框时就会抛出异常。
Project:ActivityLifecycle

4、Intent
两类intent:
显式:指定具体的目标组件处理
startActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class));
隐式:由系统接受并决定如何处理
startActivity(new Intent(Intent.ACTION_DIAL));
在AndroidManifest.xml中定义activity、service、broadcast receiver接受的intent

Intent filter: action、category、data


5、Service
没有UI,启动之后一直运行于后台
例子:音乐播放器
与应用程序的其他模块(例如activity)一同运行于主线程中
通过startService或bindService创建Service
通过stopService或stopSelf终止Service
一般的,在activity中启动和终止service

6、服务--Service
Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:
第一步:继承Service类
public class SMSService extends Service { }
如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:
<service android:name=".SMSService" />
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

服务常用生命周期回调方法如下:
onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。
onDestroy()该方法在服务被终止时调用。

与采用Context.startService()方法启动服务有关的生命周期方法
onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。

与采用Context.bindService()方法启动服务有关的生命周期方法
onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。
onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。


7、采用startService()启动服务
采用Context.startService()方法启动服务的代码如下:
public class HelloActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ......
        Button button =(Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
                Intent intent = new Intent(HelloActivity.this, SMSService.class);
                startService(intent);
        }});        
    }
}
8、何为Content provider
什么是Content provider?
Content Provider 是Android应用程序的四大组成部分之一
是android中的跨应用访问数据机制
为何需要content provider?
Android中每一个app的资源是私有的
app通过content provider和其他app共享私有数据
9、如何使用content provider
通过content resolver访问
Context.getContentResolver()

10、如何使用content provider
URI定位资源
content://contacts/people
content://call_log
类似关系数据库的访问方式
delete(Uri url, String where, String[] selectionArgs)
insert(Uri url, ContentValues values)
query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder)
update(Uri uri, ContentValues values, String where,
                String[] selectionArgs)
以二维数据表的格式暴露数据,缺省都包含_id字段

定义自己的content provider

11、Android的存储
一般的,应用程序的数据(包括文件)都是私有的
四种持久存储方式
Preferences——类似properties,xml文件
Files
Database——SQLite
Network
12、创建Broadcast Receiver
实现一个BroadcastReceiver
public class MyAndroidReceiver extends BroadcastReceiver
override onReceive(Context context, Intents Intents)
注册BroadcastReceiver
在AndroidManifest.xml文件当中进行注册
<receiver Android:name=“MyAndroidReceiver">
  <Intents-filter>
      <action Android:name=”com.eoeAndroid.action.NEW_BROADCAST”/>
    </Intents-filter>
</receiver>
在代码当中直接进行注册
IntentsFilter filter = new IntentsFilter(NEW_BROADCAST );
MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver();
registerReceiver(MyAndroidReceiver , filter);
13、Broadcast receiver生命周期

14、Android权限控制
在AndroidManifest.xml中描述一个app的权限
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" >
  <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>
权限举例(参考android. Manifest.permission)

五、接下来教大家如何开发一个例子1、从Internet获取数据
利用HttpURLConnection对象,我们可以从网络中获取网页数据.
URL url = new URL("http://www.sina.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6* 1000);//设置连接超时
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is = conn.getInputStream();//得到网络返回的输入流
String result = readData(is, "GBK");
conn.disconnect();
System.out.println(result);
//第一个参数为输入流,第二个参数为字符集编码
public static String readData(InputStream inSream, String charsetName) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while( (len = inSream.read(buffer)) != -1 ){
                outStream.write(buffer, 0, len);
        }
        byte[] data = outStream.toByteArray();
        outStream.close();
        inSream.close();
        return new String(data, charsetName);
2、向Internet发送请求参数
利用HttpURLConnection对象,我们可以向网络发送请求参数.
String requestUrl = "http://localhost:8080/itcast/contanctmanage.do";
Map<String, String> requestParams = new HashMap<String, String>();
requestParams.put("age", "12");
requestParams.put("name", "中国");
StringBuilder params = new StringBuilder();
for(Map.Entry<String, String> entry : requestParams.entrySet()){
        params.append(entry.getKey());
        params.append("=");
        params.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
        params.append("&");
}
if (params.length() > 0) params.deleteCharAt(params.length() - 1);
byte[] data = params.toString().getBytes();
URL realUrl = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
3、=向Internet发送xml数据
利用HttpURLConnection对象,我们可以向网络发送xml数据.
StringBuilder xml =  new StringBuilder();
xml.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
xml.append("<M1 V=10000>");
xml.append("<U I=1 D=\"N73\">中国</U>");
xml.append("</M1>");
byte[] xmlbyte = xml.toString().getBytes("UTF-8");
URL url = new URL("http://localhost:8080/itcast/contanctmanage.do?method=readxml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6* 1000);
conn.setDoOutput(true);//允许输出
conn.setUseCaches(false);//不使用Cache
conn.setRequestMethod("POST");                
conn.setRequestProperty("Connection", "Keep-Alive");//维持长连接
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(xmlbyte.length));
conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
outStream.write(xmlbyte);//发送xml数据
outStream.flush();
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream is = conn.getInputStream();//获取返回数据
String result = readAsString(is, "UTF-8");
outStream.close();        

4、HTTP多线程断点下载应用程序
多线程下载:

5、HTTP多线程断点下载应用程序
如何才能从文件的指定位置处开始下载文件?(比如从50MB开始)这一点我们可以通过HTTP请求信息头来设置,可以使用HTTP请求信息头的“Range”属性。
   例如:只要在请求头中加入以下代码就可以只请求部分数据: Content-Range: bytes 20000-40000/47000 , 即从第20000字节请求到第40000个字节,(文件长度是47000字节)

本帖de评分: 1 条评分 DB +10
DB+10 2014-02-09

谢谢分享啊 ,~

a86800557

ZxID:8205274

等级: 上等兵
举报 只看该作者 沙发   发表于: 2014-02-04 0
好复杂啊- -、、、编程果然难学
天命之子

ZxID:19535769

等级: 大将
文能提笔安天下,武能立马定乾坤

举报 只看该作者 板凳   发表于: 2014-03-18 0
外行还是看不太懂
176fb

ZxID:45778213

等级: 新兵
举报 只看该作者 地板   发表于: 2014-03-21 0
      
« 返回列表
发帖 回复