mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
dev
dev

ZipFile.getEntry 无法获得内容

最近android上做660多MB的zip文件中解压缩wav文件 ZipEntry zipEntry = zipFile.getEntry(entryName);发现上面的方法始终null但文件时的确存在的,于是在市场上下载各种zipapp 打开zip文件后,发现里面部分文件夹丢失费解,于是上网咕咕噜http://stackoverflow.com/questions/8653283/reading-a-huge-zip-file-in-java-out-of-memory-error It is very unlikley that you get an out of memory exception because of processing a ZIP file. The Java classes ZipFile and ZipEntry don't contain anything that could possibly fill up 613 MB of memory. What could exhaust your memory is to keep the decompressed files of the ZIP archive in memory, or - even worse - keeping them as an XML DOM, which is very memory intensive. Switching to another ZIP library will hardly help. Instead, you should look into changing your code so that it processes the ZIP archive and the contained files like streams and only keeps a limited part of each file in memory at a time. BTW: I would be nice if you could provide more information about the huge ZIP files (do they contain many small files or few large files?) and about what you do with each ZIP entry. Update: Thanks for the additional information. It looks like you keep the contents of the ZIP file in memory (although it somewhat depends on the implementation of the S3Object class, which I don't know). It's probably best to implement some sort of batching as you propose yourself. You could for example add up the decompressed size of each ZIP entry and upload the files every time the total size exceeds 100 MB. -------------------------------- 上面的是java上的原因,android 上不知道是不是也是这个原因.目前没找到解决方案.

2012-02-03 0comments 92hotness 0likes mikebai Read all
dev

Java编码的那些事儿

Java编码 Unicode是全球标准字符集,是Java所为String采用的编码方式,任何字符用2个字节表示。String实例中保存有一个char[]字符数组。string.getByte()方法可以获得到这个字符串实例在指定编码下的字节数组,注意的是不带参数的getByte方法使用OS默认的字符集,比如GB2312(简体中文)。所以要得到Unicode下的字节数组,需要这样:string.getBytes(“unicode”)(此处注意见下文)。如果使用new String(byte[], Charset)构造,可以将已知编码的字节数组重新拼成一个String实例,即用指定的Charset去组合字节为Unicode字符罢了。同理,不带Charset的String构造使用OS默认字符集。 因此,得到UTF-8的字节数组,按以下步骤: 1 2 3 4 String str = "梦"; byte[] bytes = str.getBytes("UTF-8"); "使用UTF-8解码字符串得到的UTF-8字节数组" String str2 = new String(bytes, "utf8"); "按照当初被解码的方式(utf8)重新组成Java String类" str.equals(str2) == true; "使用大小写不同的编码写法,来区别不同API中参数代表的意义" 所以,str = new String(str.getBytes(Charset), Charset) 什么都没有做,除了新建了个String对象。 但是如果你要获取unicode的字节数组,却有非常多的选择,而且很容易出错。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void echoBytesTest() { String s = "梦"; echoBytes(s, "Unicode"); echoBytes(s, "UnicodeBig"); echoBytes(s, "UnicodeLittle"); echoBytes(s, "UnicodeBigUnmarked"); echoBytes(s, "UnicodeLittleUnmarked"); echoBytes(s, "UTF-16"); echoBytes(s, "UTF-16BE"); echoBytes(s,

2012-01-31 0comments 95hotness 0likes mikebai Read all
dev

当webview加载网页的时候在标题栏上显示加载进度

ublic class ProgressTest extends Activity{ final Activity context = this; @Overridepublic void onCreate(Bundle b) {   super.onCreate(b);   requestWindowFeature(Window.FEATURE_PROGRESS);//让进度条显示在标题栏上   setContentView(R.layout.main);    WebView webview = (WebView)findViewById(R.id.webview);   webview.setWebChromeClient(new WebChromeClient() {              public void onProgressChanged(WebView view, int progress) {                //Activity和Webview根据加载程度决定进度条的进度大小               //当加载到100%的时候 进度条自动消失                context.setProgress(progress * 100);       }    });   webview.loadUrl(url);}

2012-01-30 0comments 99hotness 0likes mikebai Read all
dev

日系手机ISW11M root教程

转载请注明来源:www.mikebai.com 手机上的操作 安装superuser, 设置-->应用程序,选中未知源. 设置-->应用程序-->开发,选中USB调试和允许模仿位置 以下为PC上的操作 安装sdk(只需要安装其中的tools包)和jdk(不明白的朋友请自行google) 设置系统环境变量 如果sdk安装目录为:D:\Android\android-sdk D:\Android\android-sdk\platform-tools;D:\Android\android-sdk\tools; 安装isw11m驱动 http://www.motorola.com/Support/US-EN/Support-Homepage/Software_and_Drivers/USB-and-PC-Charging-Drivers http://www.motorola.com/staticfiles/Support/Experiences/Global_Drivers/MotoHelper_2.1.32_Driver_5.4.0.exe 创建C:\root文件夹 将 root for IIS11M中所有文件复制到C:\root文件夹下 点此处下载root for IIS11M.rar在cmd中逐行运行以下命令, 其中会出现错误提示,为正常现象,注意看下图,确认逐行输入的位置 cd C:/root adb push photon-torpedo.tar /data/tmp adb shell cd /data/tmp /bin/tar xf /data/tmp/photon-torpedo.tar /data/tmp/photon-torpedo.sh /data/tmp/install-su.sh以上执行后,root成功 检查root是否成功 cmd中输入以下命令 adb shell su 这时候如果手机弹出superuser界面,询问是否允许权限是,选择是. cmd窗口最后一行出现#字样,即为root成功

2012-01-27 0comments 110hotness 0likes mikebai Read all
dev

apk文件的mime设置

网站上提供apk文件下载需要设置自定义的mime 扩展名:".apk"Mime类型:"application/vnd.android.package-archive"

2012-01-18 0comments 106hotness 0likes mikebai Read all
dev

android个人笔记

Activity加载模式standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。 对于每一个启动Intent都会生成一个activity的新实例.跳转源和目的activity为同一个taskid singleTop:  当activity被设置为singleTop的加载模式时,如果堆栈的顶部已经存在了该Activity,那么,它便不会重新创建,而是调用onNewIntent。如果,该Activity存在,但不是在顶部,那么该Activity依然要重新创建.跳转源和目的activity为同一个taskid singleInstance:设置为该模式的activity将独立创建一个 task,并且独享该taskid.其所在栈的唯一activity,它会每次都被重用。其它activity不能存在那个task里.当发现已经存在一个Task中包含自己的实例时,它会调用自己的onNewIntent。eg: a(taskid=1)->b(sinleInstance,taskid=2)-->c(taskid=1)如果a在跳转到b后自己调用了finish()方法,则c的taskid=3跳转源和目的activity的taskid一定不相同 singleTask: eg: a(taskid=1)->b(singleTask,taskid=1)设置为singleTask模式的activity并不一定总是新开一个taskid.当它不是app的启动面时,将和启动面taskid相同.但是将非启动面设置为该模式要注意数据丢失问题.因为很有可能是a为欢迎页面,初始化等耗时工作完成后调用b.并自宫a(finish方法)这时候当系统回收内存后,在home面重新进入程序的时候,a中被初始化的数据将丢失.因为a已经被自宫,导致初始化数据丢失.当singleTask模式的Activity启动时,如果发现在某个Task中已经存在,那么它会先将该它上部的销毁,然后调用它的onNewIntent函数。   Activity状态:活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。 暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。当一个Activity变为完全隐藏,它将会变成停止。" 停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。 待用:在一个Activity被杀死后和被装载前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。 Intent:Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。 FLAG_ACTIVITY_REORDER_TO_FRONT如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。 FLAG_ACTIVITY_NEW_TASK   FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_RESET_TASK_IF_NEEDED FLAG_ACTIVITY_SINGLE_TOP     android:taskAffinity

2012-01-16 0comments 107hotness 0likes mikebai Read all
dev

Android四种Activity的加载模式

建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式:   Android的进程,线程模型:  http://www.cnblogs.com/ghj1976/archive/2011/04/28/2031586.html 其中对“Android的单线程模型”的描述,明白Activity的一些注意事项。   Android Application Task Activities的关系   http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html  尤其要明白 Task 是啥。   一个Activty的生命周期   Activty的生命周期的也就是它所在进程的生命周期。   每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。   但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到相关的通知信息。   在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。 onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。 onStart :该方法的触发表示所属活动将被展现给用户。 onResume :当一个活动和用户发生交互的时候,触发该方法。 onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。 onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。 onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。 onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。 onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。 通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。    Activity栈   上面提到开发者是无法控制Activity的状态的,那Activity的状态又是按照何种逻辑来运作的呢?这就要知道 Activity 栈。   每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。   当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。   如果用户使用后退按钮返回的话,或者前台的Activity结束,在栈上的Activity将会移上来并变为活动状态。如下图所示:   一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。   Activity状态   一般认为Activity有以下四种状态:   活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。   暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。   当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。当一个Activity变为完全隐藏,它将会变成停止。   停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。   待用: 在一个Activity被杀死后和被装在前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。   activity的四种加载模式   在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。   在android里,有4种activity的启动模式,分别为: standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。 singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。 singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。 singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。   这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。   相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用 Intent.FLAG_ACTIVITY_R

2012-01-14 0comments 109hotness 0likes mikebai Read all
dev

Android Application Task Activities的关系

什么是Android  Application? 简单来说,一个apk文件就是一个Application。 任何一个Android Application基本上是由一些Activities组成,当用户与应用程序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应。 这些Activities捆绑在一起成为了一个处理特定需求的Application, 并且以“.apk”作为后缀名存在于文件系统中。 Android平台默认下的应用程序 例如:Email、Calendar、Browser、Maps、Text Message、Contacts、Camera和Dialer等都是一个个独立的Apps。   安装 Application的过程也可以简单理解为将其所包裹的Activities导入到当前的系统中,如果系统中已经存在了相同的Activities, 那么将会自动将其关联,而不会重复安装相同的Activities,避免资源的浪费。 Application卸载的过程也会检查当前所关联的 Activities是否有被其它Application标签所关联,如果仅仅是提供当前的Application使用,那么将会彻底被移除,相反则不做 任何操作。   就像我们已经知道的,Application基本上是由四个模块组成:Activity、Service、Content Provider 和 Broadcast Receiver,其中Activity是实现应用的主体。   什么是 Activity Stack? 操作应用程序时,有时需要调用多个Activities来完成需求,例如:发送邮件程序,首先是进入邮件主界面,然后启动一个新的Activity用于填写新邮件内容,同时可以调出联系人列表用于插入收件人信息等等。在这个操作过程中 Android平台有一个专门用于管理Activities堆栈的机制,其可以方便的线性记录Activities实例,当完成某个操作时,可以通过导航功能返回之前的Activity(通过按操作台的“Back”按钮)。 每次启动新的Activity都将被添加到Activity Stack。用户可以方便的返回上一个Activity直到Home Screen,到达Home Screen后,将无法再继续查看堆栈记录(俗话说:到头了)。如果当前Task被中止(Interrupting the task),返回到系统主界面后启动了其它操作,当希望返回到前一个Task继续执行时,只需要再次通过主界面的Application launcher或者快捷方式启动这个Task的Root Activity便可返回其中止时的状态继续执行。 相对于Views、 Windows、Menus和Dialogs而言,Activity是唯一可被记录在History stack中的数据,所以当你所设计的应用程序需要用户由A界面进入到次一级界面B,当完成操作后需要再次返回A,那么必须考虑将A看作为 Activity,否则将无法从历史堆栈中返回。   什么是Task 当我们需要一个Activity可以启动另一个Activity,可能另外一个Activity是定义在不同应用程序中的Activity。 例如,假设你想在你的应用中让用户显示一些地方的街景。而这里已经有一个Activity可以做到这一点,因此,你的Activity所需要做的只是在 Intent对象中添加必要的信息,并传递给startActivity()。地图浏览将会显示你的地图。当用户按下BACK键,你的Activity会再次出现在屏幕上。 对于用户来说,看起来好像是地图浏览与你的Activity一样,属于相同的应用程序,即便是它定义在其它的应用程序里,并运行在那个应用程序的进程里。 Android通过将这两个Activity保存在同一个Task里来体现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。 它将相关的Activity组合在一起,以stack的方式管理(就是前面提到的Activity Stack),这就是Task。 在Android平台上可以将task简单的理解为幽多个Activity共同协作完成某项应用,而不管Activity具体属于哪个Application, 通过下图可以更清晰的理解Application、task、Activity三者之间的关系:   Task 有啥用? 我们用过Android的手机就会知道有下面的场景: 假设我们首先在用IReader在看书,从选书到具体书的阅读界面,这是有好几个Activity。我们每一个点击的Activity都被放在阅读这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。 我们在阅读到一半时,想看看Sina微博,按Home键离开了IReader。 在Sina微博界面也是有多个Activity,我们一步到阅读界面。这时候我们每一个点击的Activity都被放在Sina微博这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。 我们这时候再回到IReader读书界面,原先的状态还是保留的。 显然每一个Task有自己的 Activity Stack。 Task就是这样为了方便人们使用手机而设置的,就像前面提到的场景Task可以跨Application。   下面这个图从另外一个角度描述了Application Task Activities的关系   Task通过Application launcher、Home screen的快捷方式或者 由 “Recent Tasks”(长时间按住Home键)最近使用过的Task记录中启动。 当从一个Activity中启动另外一个Activity时,Back键将作用于返回前一个Activity,与此同时 新开启的Activity将被添加到Activity Stack中。 有关更详细的可以参看这篇文章: [译]关于Activity和Task的设计思路和方法 http://blogold.chinaunix.net/u2/85193/showart_1966109.html   参考资料:

2012-01-14 0comments 107hotness 0likes mikebai Read all
dev

解决eWebEditor编辑器在火狐浏览器不能兼容的问题

1 在火狐浏览器里 点 工具-附加组件-获取附加组件,输入IE TAB,安装一个IE tab插件,装好了重启。 2 在Firefox无法正常显示的网页上,右键点击标签页,选择“切换浏览器”,然后Firefox就切换到IE内核的浏览器了,这样既使用的Firefox,又有IE的兼容性。

2012-01-14 0comments 89hotness 0likes mikebai Read all
dev

Android的七巧板Activity之三 Activity的归属(原文作者禁止转载)

2012-01-11 0comments 95hotness 0likes mikebai Read all
1…1415161718…25

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang