当前位置:  编程技术>移动开发
本页文章导读:
    ▪rename application package 碰到的exception        rename application package 遇到的exception一个项目需要有两个分支,运行在同一台手机上,所以需要快速的能切换package名称, 使用android自带功能, 右键工程->Android Tools->rename application package  .........
    ▪ (3)Libcurl中使用curl_easy_perform阻塞, 遇到无信号卡死的完美解决方案        (三)Libcurl中使用curl_easy_perform阻塞, 遇到无信号卡死的完美项目背景: 近来jwisp在做OMA-DM的android终端侧,要实现的功能包括FUMO, SCOMO下载管理.由于项目是基于funambol的开源代码,在实现FUMO和SCOMO时.........
    ▪ “手机”或者。       “手机”或许。。。2012年的暑假,陈列在国家博物馆“手机的发展史”以iphone终结。 手机的巨大发展就不作详述了,以下为手机发展的相关链接: http://www.360doc.com/content/11/0114/21/1385643_8659746.........

[1]rename application package 碰到的exception
    来源: 互联网  发布时间: 2014-02-18
rename application package 遇到的exception

一个项目需要有两个分支,运行在同一台手机上,所以需要快速的能切换package名称,

使用android自带功能,

右键工程->Android Tools->rename application package  这时遇到异常

java.lang.reflect.InvocationTargetException
 at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
 at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:1666)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
 at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1663)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizard.createChange(RefactoringWizard.java:663)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizard.computeUserInputSuccessorPage(RefactoringWizard.java:502)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizard.getStartingPage(RefactoringWizard.java:472)
 at org.eclipse.jface.wizard.WizardDialog.showStartingPage(WizardDialog.java:1271)
 at org.eclipse.jface.wizard.WizardDialog.createContents(WizardDialog.java:610)
 at org.eclipse.jface.window.Window.create(Window.java:431)
 at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1089)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:178)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:202)
 at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:122)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.RenamePackageAction.initiateAndroidPackageRefactoring(RenamePackageAction.java:168)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.RenamePackageAction.promptNewName(RenamePackageAction.java:151)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.RenamePackageAction.run(RenamePackageAction.java:106)
 at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
 at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
 at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
 at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
 at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1022)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
 at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:916)
 at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
 at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:585)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
 at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
 at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
 at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
 at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
 at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: java.lang.NullPointerException
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.updateJavaFileImports(ApplicationPackageNameRefactoring.java:149)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring$JavaFileVisitor.visit(ApplicationPackageNameRefactoring.java:426)
 at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:126)
 at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:85)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:95)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:52)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:124)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:108)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.createChange(ApplicationPackageNameRefactoring.java:126)
 at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
 at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
 at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
 at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
java.lang.NullPointerException
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.updateJavaFileImports(ApplicationPackageNameRefactoring.java:149)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring$JavaFileVisitor.visit(ApplicationPackageNameRefactoring.java:426)
 at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:126)
 at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:85)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
 at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:95)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:52)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:124)
 at org.eclipse.core.internal.resources.Resource.accept(Resource.java:108)
 at com.android.ide.eclipse.adt.internal.refactorings.renamepackage.ApplicationPackageNameRefactoring.createChange(ApplicationPackageNameRefactoring.java:126)
 at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
 at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
 at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
 at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

 

 

网上找了一圈也没有发现解决办法,后来原因找到了:

在工程中,有人添加了一个Activity,但这个Activity被整个注释掉了,所以产生了这个异常。将它删除掉。能够完美的更改工程包名。


    
[2] (3)Libcurl中使用curl_easy_perform阻塞, 遇到无信号卡死的完美解决方案
    来源: 互联网  发布时间: 2014-02-18
(三)Libcurl中使用curl_easy_perform阻塞, 遇到无信号卡死的完美

项目背景:

近来jwisp在做OMA-DM的android终端侧,要实现的功能包括FUMO, SCOMO下载管理.由于项目是基于funambol的开源代码,在实现FUMO和SCOMO时,使用了libcurl的库来实现下载服务测的指定文件,下载后实现android固件升级或android应用下载安装功能,最后将FUMO/SCOMO的下载安装结果上报给服务端.

下载流程比较简单, 使用curl_easy_perform即可实现完整的下载流程,安装后,使用OMA DM协议上报给平台侧.但是jwisp这里的需求还有两个异常情况需要处理:

1.      下载过程中,遇手机突然掉电(操作:扣电池), android终端再次启动后应能恢复现场然后自动下载,下载方式为建议断点续传

2.      下载过程中信号中断,中断时间在5分钟之内,终端应尝试重新连接,连接次数在3次以上.重新连接后建议使用断点续传方式继续下载.

libcurl使用时疑难问题

在使用libcurl时, jwisp发现, curl_easy_perform是阻塞的方式进行下载的, curl_easy_perform执行后,程序会在这里阻塞等待下载结束(成功结束或者失败结束).此时若正常下载一段时间后,进行网络中断, curl_easy_perform并不会返回失败,而是阻塞整个程序卡在这里,此时即使网络连接重新恢复, curl_easy_perform也无法恢复继续下载,导致整个程序出现”死机”状态.

但是若先断网, 然后进行curl_easy_perform的话,会直接返回失败,不会阻塞

在网上搜索后发现, 大家在网上遇到这个问题的很多,但是解决方法很少,下面jwisp就把网上建议的可以使用的解决方法罗列:

1.      使用multi模式下载,而不使用easy模式,此方法的唯一好处就是multi并不会阻塞,而是立即返回.但是缺点是带来了问题,其一就是需要自己去阻塞,当我们需要返回时再返回,其二还需要启动一个线程,需要自己控制整个过程的节奏.

2.      在下载中,另起一个线程,若发现下载状态卡死(可以通过定期检查文件大小来实现),则从外部中断下载线程.此方法需另起线程,而且直接中断线程,会给整个程序带来不稳定.

在尝试使用网上的方法失败后, jwisp终于设计出了自己的方案,并完美解决信号中断异常,下载中掉电异常,断点续传等问题.并且此方案不需要启动任何另外的线程,不需要手动进行阻塞,在信号中断后,恢复连接最快可在0.5秒内恢复下载.并且恢复下载方式全部为断点续传.

主要的设计思路如下, 下载过程中,设置超时时间为30秒, 30秒后若下载未完成就重新连接进行下载(这个可解决卡死问题),每次下载时进行判断,若不是首次下载则获得当前已下载文件大小,从该大小处进行续传,若网络仍处于断开状态,再次连接会立即返回失败,此时让当前线程等待0.5秒后进行连接(这个可以解决瞬间恢复连接的问题),连接次数不超过600次(这个用来保证5分钟后返回失败).掉电需要在程序已启动时检查是否上次未下载完如果是,则直接调用下载续传方法即可.这样基本上所有的问题的流程就都能顺利走下来,并且下载过程体验好,可随时取消.

该方案主要通过两个函数来实现, 一个负责进行断点续传和基本设置,并执行下载,一个负责控制整个下载重试次数,返回下载结果.并且需要注意的是,安装完成后,应将相应的文件删除掉.

此方案容易理解, 代码比较简单, 但是在此方案之前, jwisp试过不下10中, 最终这套方案就是由这10套方案改进出来的. 此代码可以方案移植到各位读者需要的环境中去, 只需进行小的参数的改变即可适应

源代码在下一节附上

 


    
[3] “手机”或者。
    来源: 互联网  发布时间: 2014-02-18
“手机”或许。。。

2012年的暑假,陈列在国家博物馆“手机的发展史”以iphone终结。

手机的巨大发展就不作详述了,以下为手机发展的相关链接:

http://www.360doc.com/content/11/0114/21/1385643_86597464.shtml

http://news.newhua.com/news1/phone_use/2009/519/095191427206C4JC08AHG3700J0HD6835DF5I9C6861BB3EC7BHF434J_5.html?lt=common

http://tech.huanqiu.com/mob/pic/focus/2010-10/1160743.html

。。。

手机是为满足人们移动性的信息交换的需求的大环境应运而生。手机是时代的产物,也必将随时代发展衍化,或许顺应时代的发展以另一种形式履行着它存在的使命。

无疑这种趋势已十分明显。

手机在产生阶段就是以语音的形式作为信息传递的手段,并且这种通信是建立在电信运营商的电话服务,很长的一段时间包括现在也没有舍弃这种通信模式。即使现在已经出现了许多在功能上具有可替代性的用户群广泛应用,如微信,网络电话等,但依然没有完成在短时间内的取代。

为什么通话服务没有迅速取代?
原因很明显。可以是覆盖度,这应该可以花一段时间解决掉。可以是成熟完善更具可靠性(实名业务办理),这个也可以找到一种解决办法。或许只是习惯,惯性的认知。

以后“手机”会以什么呈现形式,渐已清晰。

作为移动设备,(不需要支持SIM卡的,SIM卡会消失)平板电脑,具有相当的便携性,还具备更强办公性。


移动设备的移动网络时代——移动时代。

 

手机作为移动设备的先驱是最先触及到移动,也必将发展,或许消失也或许演化为另一种形式存在。这是“手机”的必然。


(不专业, 不妥之处,敬请指正!)

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3