黑马程序员android多线程断点activity_第1页
黑马程序员android多线程断点activity_第2页
黑马程序员android多线程断点activity_第3页
黑马程序员android多线程断点activity_第4页
黑马程序员android多线程断点activity_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多线程断点续传注意:(注意模拟器问题,使用In加速模式,文件系统(Fileexplorer视图)可能会挂,只能用Arm处理器模式),"Range",使用在的过,使用一种持久化的方式每个进程的进度,如果中断,上次的进度,继续(rws模式;网络操作必须在新线,新线修改界面时需要回到主线程处理(下面的Handler由主线程创建;ProgressBar内部已经实现了可以在新线程操作,TextView,多线程示例图 根 Range字段就可以获取指定位置的数据,例如:Range:bytes=100- @authorzhaoyu2013-7-18下午publicclassDPDownloadTaskextendsThreadprivateURL //privateFile privateFiletempFile; //用来每个线程的进度的privatelong //每个线程要多privatelongbeginTime; //文件开始时间privatelongtotalFinish; //总共完成了多少privatelongtotalLength; //文件的总长度 privatestaticfinalStringDOWN_DIRmnt/sdcard/";// privateHandlerhandlernew //处理器对象privateCallBack //回调,publicDPDownloadTask(Stringaddress)throwsIOExceptionStringfilename=address.substring(address.lastIndexOf("/")+1);file=newFile(DOWN_DIR,filename);tempFile=newFile(file.getAbsolutePath()+".temp");url=newURL(address);}publicDPDownloadTask(Stringaddress,CallBackcallback)throwsIOExceptionthis.callback=callback;}publicvoidrun()tryHttpURLConnectionconn=(HttpURLConnection)url.openConnection();intcode=if(code==200)totalLength=//文件总长度//每个线程要的长if(callback!=null)handler.post(newRunnable()publicvoidrun(){}}if(!tempFile.exists())RandomAccessFileraf=newRandomAccessFile(tempFile,//创建临时文件,写入每个线程的进for(inti=0;i<THREAD_COUNT;i++){//写入整形的0,即4个字}}//==启动线程for(inti=0;i<THREAD_COUNT;i++)new}}beginTime=}catch(IOExceptione){}}privateclassDownloadThreadextendsThreadprivateint //用来标记当前线程是任务中的第几个程publicDownloadThread(intid)this.id=}publicvoidrun()try//==从临时文件中找出线程要开始位置RandomAccessFiletempRaf=newRandomAccessFile(tempFile,//模式rwstempRaf.seek(id*//将指针移动到当前线程的位置(每个线程写1个int值,占4字节intthreadFinish=//当前线程已了多//加上同步锁

synchronized(DPDownloadTask.this)totalFinish+=//统计所有线程已完成了多}longstart=threadLength*id+//计算当前线程起始位longend=threadLength*id+(threadLength-//结束位置

System.out.println(String.format("线程%sssidstartHttpURLConnectionconn=(HttpURLConnection)url.openConnection();//设置当前线程的范InputStreamips=RandomAccessFilerandFile=newRandomAccessFile(file,//随机文件intlen=byte[]buffer=newbyte[1024*//缓冲空间while((len=ips.read(buffer))!=-1){randFile.write(buffer,0,len);//写入本地文threadFinish+=tempRaf.seek(id*//临时文件指针指向当前线程位//写入当前线程的完成synchronized(DPDownloadTask.this)//更新总完成totalFinish+=}if(callback!=null)handler.post(newRunnable()publicvoidrun(){callback.onDownloading(totalLength,totalFinish);}}}// System.out.println("线程:"+id+"完成if(totalFinish==totalLength)//如果已完成长度等于服务端文件长度(代表完成//删除临时文if(callback!=null){handler.post(newRunnable(){publicvoidrun(){}}}}catch(Exceptione){}}}@authorzhaoyu2013-7-18下午开public开voidonStart(longtotalLength); voidonDownloading(longtotalLength,longtotalFinish);//void }}publicvoiddownload(Viewv)StringfilePath=trynewDPDownloadTask(filePath,newCallBack()publicvoidonStart(longtotalLength){progressBar1.setMax((int)totalLength);}publicvoidonDownloading(longtotalLength,longtotalFinish){progressBar1.setProgress((int)totalFinish);precentTV.setText(totalFinish*100/totalLength+"%");}publicvoidonSuccess(){}}catch(IOExceptione){}}是所有View的容器;有个ActivityManager的管理服务类,用于与管理Activity的启动Activity启动时,会把Activity的放入任务栈中Activity在文件中Application节点中<activity>节点android:label="@string/app_name"><!--程序的,LAUNCHER表示桌面快捷方式,进入的是此Activity--<actionandroid:name="ent.action.MAIN"<categoryandroid:name="ent.category.LAUNCHER"/><!—启时,默认匹配--Intent后指定包名和类名;IntentintentnewIntent(thisOtherActivity.class); //启动新的ActivityIntentintent=newintent.setClassName("com.itheima.activity","com.itheima.activity.OtherActivity"); //包 //启动新的Intentintent=new //设置动intent.setData(Uri.parse(":// //设置数//网//音频/,设置typeintent.setDataAndType(Uri.parse("file:///mnt/sdcard/daqin.mp3audio/*");//设置数据和Intentactioncategorydata在<intent-filter>Activity才<!--Activity,lable表示Activity的标题--android:label="OtherActivity"><!--配置隐式意图,匹配http<actionandroid:name="ent.action.VIEW" 作为View

" <categoryandroid:name="ent.category.DEFAULT"/><!--<!--匹 <actionandroid:name="ent.action.CALL"<data "<categoryandroid:name="ent.category.DEFAULT"/><!--示启动-->类型-->示启动-->

<!--匹配音频、--<actionandroid:name="ent.action.VIEW" <categoryandroid:name="ent.category.DEFAULT"/><!--Intent.putExtra()方法装入一些数据,ActivityonCreate可传输的数据类型:a.基本数据类型(数组), b.String(数组), c.Bundle(Map), Serializable(Bean),e.Parcelable(放在内存一个共享空间里);IntentintentnewIntent(thisOtherActivity.class);intent.putExtra("name",""); //携带数据intent.putExtra("age",12);Intentintent=newIntent(this,OtherActivity.class);Bundleb1=newBundle();b1.putString("name","b1.putInt("age",25);Bundleb2=newBundle();b2.putString("name","b2.putInt("age",44);intent.putExtra("b1",b1);IntentintentnewIntent(thisOtherActivity.class);p=new("张辽",44);intent.putExtra("p",OtherActivity的onCreate()getIntent().get使用startActivityForResult(Intentintent,intreqode)方法打开重写onActivityResult(intreqode,intresultCode,Intentdata)方法)不能被摧毁(finish方法ActivityonActivityResultpublicvoidopenActivityB(Viewv)IntentintentnewIntent(thisActivity_B.class);p=new("张辽",44);intent.putExtra("p",, //此方法,启动新}protectedvoidonActivityResult(intreqode,intresultCode,Intentdata)if(datanull //没有数据,不执}

System.out.println(reqode+","+ //code可用来区分,哪里Stringname=intage=data.getIntExtra("age",-publicvoidclose(Viewv)//==关闭当前Activity时,设置返回的数据==Intentintent=newIntent();intent.putExtra("name","");intent.putExtra("age",55);setResult(200, }Acitivity运行:activity在最前端运行停止:activity不可见,完全被覆盖ActivityonPause方法;生命周期相关的方法(on开头 onResume:onStart之后或者从暂停状态恢复时调用,从停止状态恢复时由于调onStartonResume(界面获得焦点; onDestroy:销毁时调用;onRestart:从停止状态恢复时调用;应用启动时,onCreateonStartonResume,退出时执行:onPauseonStop切换时,将执行摧毁onPauseonStoponDestroy,再重置加载新的布局onCreateonStart切换时如果要保存数据,可以重写恢复数据时,重写: 横竖屏切换 不摧毁界面 程序继续执行保存信息状态的相关方法在Activity的摧毁或停止的时候调用(如横竖屏切换,来电,用于保存运行数Bundle中;可为onSaveInstanceState保存的数据问:一个里面有多少个任务栈二般情况下,如laun ode为singleInstance,就创建自己单独的任务栈;它是存放Activity的的,Activity不同的启动模式,对应不同的任务栈的存放在AndroidManifest.xml中的<activity>中可以配置android:launode属性,用来控Actvity ActivityActivity不在任务栈栈顶就创建,如在栈onNewInstance() Activity不存在就创Activity所在位置,

ABCD,DA,A上的BCD相应的ActivitysingleInstance:(单例)开启一个新的任务栈Activity的实例,在整个操作系统里面只有一个该任务栈的实例存在;Activity是运行在自己单独的任务栈中的空:进没有任何组件;:进只有停止状态的Activity;服务:进有正在运行的服务;可见:进有一个暂停状态的Activity;前台:进正在运行一个Activity;Activity在退出的时候进程不会销毁,会保留一个空进程方便以后启动.但在内存不足时进Activity中不要在Activity做耗时的操作,因为Activity切换到之(Activity停止了),内存不足时,也容易被销毁;ActivityrunOnUIThread因为是运行在主线,所以不要操作耗时的操作;示例代码(A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论