扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置.
商洛网站建设公司创新互联,商洛网站设计制作,有大型网站制作公司丰富经验。已为商洛近千家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的商洛做网站的公司定做!
android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示:
. . .
android:installLocation可以设置为"auto"、"internalOnly"、"preferExternal"三个值中的任何一个.
auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户 可以决定把程序放在外部储介质还是内存中.
internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了for ward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.
注意:当程序使用了Google Play的Copy Protection特性时,只能安装到内存中.
当程序被安装到外部存储介质时:
① .apk文件将被移动到外部存储介质上,但是程序的数据仍然会在内存中
② 保存.apk文件的容器将会使用一个随机生成的密钥进行加密,这样只有安装该程序的设置可以使用存在外部存储介质上的数据.
警告:当外部存储介质被卸载时,安装在该外部存储介质上的程序将立刻被终止掉!
向后兼容性:
声明了android:installLocation,但android:minSdkVersion小于8时,我们使用不低于Froyo的AVD进行编译,这样在低于Froyo的系统中android:installLocation将被忽略,而不低于Fro yo的'系统中将使用我们指定的android:installLocation.
当我们的程序具有如下行为时我们不应该将程序安装到外部存储介质上:
①Service
正在运行的服务将被终止,当外部存储介质被重新加载时服务不会被重启.
②Alarm Service
闹钟服务将被取消,开发者必须在外部存储介质重新加载后重新注册闹钟服务.
③Input Method Engines
输入法将被换成系统输入法,当外部存储介质被重新加载后用户可以通过系统设置来启动我们的输入法
④Live Wallpapers
我们的动态壁纸将被替换为默认的动态壁纸.外部存储介质重载后,用户可以更换回来.
⑤Live Folders
我们的动态文件夹将被移出.
⑥App Widgets
我们的小部件将被移出,通常只有系统重启后我们的小部件才可用.
⑦Account Managers
使用AccountManager创建的账户将会消失,直至存储介质被重新加载.
⑧Sync Adapters
只有外部存储介质被重新加载时,我们的同步功能才可用
⑨Device Administrators
我们的DeviceAdminReceiver将会失效
⑩监听开机结束事件
系统会在加载外部存储介质之前发送ACTION_BOOT_COMPLETED广播.因此安装在外部存储介质的程序将不能接受开机广播.
通常,只要我们没有使用上述的特性,我们就可以将我们的程序安装到外部存储介质上.例如,大的游戏程序.当我们的APK文件有几M大时我们应该认真的考虑是否要将程序移动到外部存储介质上以帮助用户节省内存.
在开发倒计时功能时往往我们会为了方便直接使用CountDownTimer或者使用Handler做延时来实现,当然CountDownTimer内部封装也是使用的Handler。
如果只是做次数很少的倒计时或者不需要精确的倒计时逻辑那倒没关系,比如说我只要倒计时10秒,或者我大概5分钟请求某个接口
但是如果是需要做精确的倒计时操作,比如说手机发送验证码60秒,那使用现有的倒计时方案就会存在问题。可能有些朋友没有注意到这一点,下面我们就来简单分析一下现有倒计时的问题。
这个可能是用得最多的,因为方便嘛。但其实倒计时每一轮倒计时完之后都是存在误差的,如果看过CountDownTimer的源码你就会知道,他的内部是有做 校准操作 的。(源码很简单这里就不分析了)
但是如果你认真的测试过CountDownTimer,你就会发现,即便它内部有做校准操作,他的没一轮都是有偏差,只是他最后一次倒计时完之后的总共时间和开始倒计时的时间相比没偏差。
什么意思呢,意思就是1秒,2.050秒,3.1秒......,这样的每轮偏差,导致他会出现10.95秒,下一次12秒的情况,那它的回调中如果你直接做取整就会出现少一秒的情况,但实际是没少的。
这只是其中的一个问题,你可以不根据它的回调做展示,自己用一个整形累加做展示也能解决。但是他还有个问题,有概率直接出现跳秒,就是比如3秒,下次直接5秒,这是实际的跳秒,是少了一次回调的那种。
跳秒导致你如果直接使用它可能会大问题,你可能自测的时候没发现,到时一上线应用在用户那概率跳秒,那就蛋疼了。
不搞这么多花里胡哨的,直接使用Handler来实现,会有什么问题。
因为直接使用handler来实现,没有校准操作,每次循环会出现几毫秒的误差,虽然比CountDownTimer的十几毫秒的误差要好, 但是在基数大的倒计时情况下误差会累计,导致最终结果和现实时间差几秒误差,时间越久,误差越大
直接使用Timer也一样,只不过他每轮的误差更小,几轮才有1毫秒的误差,但是没有校准还是会出现误差累计,时间越久误差越大。
既然无法直接使用原生的,那我们就自己做一个。
我们基于Handler进行封装,从上面可以看出主要为了解决两个问题,时间校准和跳秒。自己写一个CountDownTimer
思路就是在倒计时开始前获取一次SystemClock.elapsedRealtime(),没轮倒计时再获取一次SystemClock.elapsedRealtime()相减得到误差,根据delay校准。然后使用while循坏来处理跳秒的操作,与原生的CountDownTimer不同,这里如果跳了多少秒,就会返回多少次回调。
在iPhone完成新iOS设置进程中,是有多个功能区进行数据转移的。但是设备一旦激活后,就只能进行恢复出厂设置,清除设备所有数据,再次进行新iOS设置。再次进行新iOS设置进程中,可借助【转移到 iOS】APP。
1、在安卓手机端,确保WiFi已开启;
2、将 iOS 设备和安卓设备插入电源,避免因电量不足而造成传输中止的情况;
3、确保 iOS 设备上有足够的储存空间来储存即将转移的内容,包括外部 Micro SD 卡上的内容;
4、如果要转移Chrome 书签,请将安卓设备上的 Chrome 更新至最新版本;
5、在数据转移过程中,注意将两台设备贴近放置,且不要移动设备。
一、备份资料备份完成后,当安卓手机数据成功转移到iPhone后,再进行数据的还原操作即可。
二、恢复出厂设置当iPhone进行数据备份后,点开【设置】-【通用】-【还原】,再点击【还原所有内容和设置】,按照手机界面提示依次进行确认操作即可。
三、转移安卓数据到iOSiPhone还原后,进行新iOS设备的设置,直到出现【APP与数据】功能界面。即可开始Android设备数据到iOS设备的转移操作。
具体操作如下几个步骤:
步骤1:点击【从安卓设备转移数据】,按照提示确认操作,点击继续,直到出现6位数代码。
步骤2:在安卓手机端安装好【转移到 iOS】App。打开运行【转移到 iOS】App,点击【继续】,根据提示授权权限进行下一步,直到显示【输入代码】。
步骤3:在安卓手机端输入代码,直到【传输数据】功能出现,再选择自己想要传输的数据类型,点击【下一步】,等待数据转移进度条走完即可。
注:如果安卓设备显示您的互联网连接信号弱的警告,您可以忽略这条警告。完成数据转移后,可继续完成iPhone设置的设置流程,直到设备正常启动,再进行已备份数据的还原即可。
android的意思是机器人。
读音:/ ˈændrɔɪd /
词性:通常在句中作名词,作为主语或宾语。
固定搭配:android science人型机器人学;Android Market电子市场 ; 安卓市场 ; 谷歌电子市场。
例句
1、University students from all around the country brought their android friends to participate in the competition.
来自全国各地的大学生们带着他们的机器人朋友来参加本次比赛。
2、Android is a trademarked name.
Android是一个商标名。
3、For them, Android will be waiting.
对他们来说,Android将要等待。
来自我的CSDN博客:
看过Android的桌面应用都是介样的:
如何让自己的应用也达到这般效果呢?这里就介绍几种常用的方法以及它们之间的区别。
首先展示下此次demo的布局和初始状态:
初始效果图如下:
使用这个方式首先要理解几个概念,窗口层级以及窗口background/窗口透明:
Google在API-19 以及API-21新增对状态栏/导航栏窗口透明和颜色的控制:
对应的在主题内即可控制:
这里首先要明了这里状态栏和导航栏窗口是系统级窗口而Activity对应的时应用窗口,它们属于不同的窗口层级;
然后状态栏/导航栏系统级窗口是在App应用窗口之上,故而Activity应用窗口虽然有整个屏幕的大小,但是可显示内容的区域得除去其上叠加的不透明的窗口区域。详细的窗口计算绘制可参考大神老罗的博文:
Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
下面来使用主题控制导航栏/状态栏透明,同时看看上述两种设置透明的方式效果有何不同:
初始桌面和启动Activity效果图:
可以看到虽然导航栏/状态栏透明了,当时应用窗口显示的内容依然只是除去了两个系统窗口之外的区域,并没有衍生到导航栏/状态栏之下。
效果如下:
可以看到已经将应用的内容布局延伸到导航栏/状态栏下方了,来看看关于android:windowTranslucentStatus
android:windowTranslucentNavigation的官方说明看看来理解其与设置color transparent的区别:
根据FLAG的说明,可以看出设置该标志位等同于View申请设置:
PS:从效果图看,虽然布局延伸到状态栏导航栏区域,但是相应的内容“hello world”文字也被状态栏/导航栏遮住了。在布局根视图设置fitsSystemWindows为true可以使得,系统自动为视图添加一个状态栏/导航栏高度的padding:
效果如下:
查看SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN的说明,可以发现其实还有两个非常接近的FLAG:
根据官方的说明提示,SYSTEM_UI_FLAG_FULLSCREEN / SYSTEM_UI_FLAG_HIDE_NAVIGATION主要用于动态切换隐藏/显示系统导航栏/状态栏;例如书籍阅读应用/视频播放应用等。而像游戏类的全屏应用则推荐使用window flag。
上述的透明导航栏/状态栏等API基本是需要API-19或是API-21才能使用的,这里还有一种API-1的方案能够实现布局内容全屏:
实际上只需要设置FLAG_LAYOUT_NO_LIMITS就足够了;这FLAG是看Android原生的Launcher / Keyguard源码,看到有用到如此设置,其窗口设置具体原理我也没有弄清..... 有大神了解可以指点下。
PS:这个套路下,使用fitsSystemWindows="true"是无效的,智能自己控制号布局位置。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流