Androidandroid 屏幕休眠眠时,Runnable被暂停了怎么办

android 中遇到的Ui问题
1、listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来。2 、listview的上边和下边有黑色的阴影。3、lsitview的每一项之间需要设置一个图片做为间隔。(可以解决黑线问题))针对以上问题 在listview的xml文件中设置一下语句。问题1 有如下代码结解决 android:scrollingCache=&false&问题2 用如下代码解决:android:fadingEdge=&none&& 问题3& 用如下代码解决:& android:divider=&@drawable/list_driver&& 其中& @drawable/list_driver 是一个图片资源4. 自定义listview的时候,当你不使用android:cacheColorHint=“#”会出现下面选中一个空间黑色底色的情况,破坏整体美观度:5. 当你不使用android:listSelector属性,默认会显示选中的item为橙黄底色,有时候我们需要去掉这种效果
android更新ui问题 //java代码
publicclassMainextendsActivity{
publicEditTextmsgL
publicButton
android4.x网络访问会遇到的域名有关的问题
/*----------解决Android在4.0之后主线程访问网络时出的异常问题 start-------------------*/
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() &n
android开发中遇到一个图片轮播和listview的问题 android开发中遇到一个问题:
我有一个图片轮播的效果,在APP首页展示,图片轮播的下面是listview,但是listview上下滑动的时候,图片轮播总是在上面显示,如何使图片轮播的布局随listview一起滑动呢?
------解决方案-------------------- 自定义adapter,在listview第一行写
Android开发中遇到的adb问题解决方法
The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse Error:远程主机强迫关闭了一个现有的连接 adb locked! adb.exe not found adb failed to restart
android-studio 使用过程遇到的问题,持续中...
1、Rendering Problems Missing styles设计界面布局时显示的错误:
[plain]view plaincopy
RenderingProblems
Missingstyles.I
android购物车遇到的问题
最近 做购物车的时候 ,遇到几个问题,现在 总结如下: 1:不让listview复用组件(购物车,或者有特殊操作的时候): 自己保存所有的view对象
public View getView(final int position, View convertView, ViewGroup parent) { final DaydayCouponBean bean
android文件操作案例初学中遇到的问题 几乎就是照着视频中敲的代码,但是总显示文件保存不成功,logcat里面报的是一个空指针异常
指向的代码为
FileOutputStreamoutStream=context.openFileOutput(filename,Context.MODE_PRIVATE);
Layout中的代码如下
Android开发遇到的问题
1、导入某个现有工程文件夹后,出现R资源不能resolve的错误,导致程序无法编译运行,此时右键-&properties-&android,看最上面的taget又没有选择对,勾选当前可选的最高那个版本(即你本机已经安装的最高版本的SDK),点击apply,错误解决。
2、style.xml里出现样式无法识别: error: Error retriev
android listview 加载遇到的问题
http://blog.csdn.net/l_serein/article/details/7706338
转载: 描述一下场景:
菜单栏上有若干分类,点击每一个分类,ListView下分根据分类显示出相应的内容. -------------------------- 1.切换分类时出现异常.描述如下: &
android开发的界面UI布局问题
主界面上有4个图片按钮,当用户向下滑动时,第四个到第一个位置,第一个到第二个位置,第二个到第三个位置,如果向上滑动时,则相反,其实就是个类似滚轮的东西,但是要求按钮可以像Listview一样按下后随意向上或向下拖动,当第四个到第一个位置的时候和,要有Listview那种出现item的动画,第一个一点一点出来,第四个一点一点消失,如果用户滑动不到正确位
Android 第三方分享中遇到的问题以及解决方案
开发Android应用的时候遇到的问题
开发Android应用的时候遇到的问题 1、在书写Layout.xml的时候
&LinearLayout xmlns:android=&/apk/res/android& android:layout_width=&match_parent& androi
android 自定义通知栏遇到的问题
首先看报错信息: E/AndroidRuntime(12220): FATAL EXCEPTION: main
E/AndroidRuntime(12220): Process: gn.com.android.update, PID: 12220
E/AndroidRuntime(12220): android.app.RemoteServiceE
Android sharedpreferences遇到一个奇怪的问题,请大神解释下 最近在工程中遇到一个奇葩的问题:
mContext.getSharedPreferences(KEY,Context.MODE_PRIVATE).edit().putLong(ID,value).commit();
然后通过:
mContext.getSharedPrefe
Android开发环境搭建时遇到问题的解决方法
Android开发环境搭建时遇到问题的解决方法
The connection to adb is down, and a severe error has occured.
[ 16:11:56 -com.qihoo.subject ] You must restart adb and Eclips
android 自定义view更新的时候遇到的问题(求解答)
今天遇到一个很奇怪的问题,关于在view里面更新LRC歌词的,view里面有一个成员变量,lrcindex ,在draw里面会用到它来更新歌词,歌词里面有一行是红色的,表示当前正在播放的歌词。然后我拖动seekbar同时更新歌词显示,我在onProgressChanged里面更新,其他颜色的歌词能正常显示,就是那个红色的歌词还是暂停之
Android pulltorefresh引用遇到的一个问题
今天在使用pulltorefresh插件的时候遇到了一个让人头疼的问题,在Eclipse中导入要用到的library项目,然后新建一个项目引入Library,显示的是引入成功,如图
而且project.properties文件中也显示引入了,但是在项目中导入要引用library项目中的包时你会发现是发现不了包的。而且再打开引
android开发,binderService遇到的一个问题,求大神帮忙解决~ 在编写binderService时,开始一个service时完全正常,但是点击按钮,调用unbindService(conn);解绑服务时,本应当正常结束当前进行的服务,但是显示程序已经停止运行。。,LOGCAT有截图,那个错误没有显示所在行数啊,在MANIFAST里明明已经声明了,到底是怎么回事呢?求大神
关于android中Runnable的问题 对多线程这边一直不是很熟悉,趁着学习Android的机会,重新学习一下多线程
在学习中遇到这么一个情况,我在学习handler传递message的时候,写了这么一断代码
Runnablerun=newRunnable(){ inti=1; @Overri
问题标签用户 android 下载 跨界面更新UI 项目遇到问题,在一个activity中点击下载一堆文件,然后需要在另一个activity中的fragment中的listview中更新正在下载的item的进度。
我是使用广播加异步更新。
但总觉得效率有点慢。
有更好的方法吗?
------解决思路---------------------- 你下载的这些文件相当于一个数据源,listv
android开发环境搭建中容易遇到的问题和疑惑
1.JDK是向下兼容的,JDK安装高版本,eclipse、ADT、SDK安装低本版本是可以的。 2.eclipse的版本与ADT、SDK的版本必须是匹配的。无论是低版本的eclipse安装高版本的ADT还是,高版本的eclipse安装低版本的ADT,在安装过程中都会出现conflict而导致不能安装,即使安装过程能够顺利通过,也属于安装不成功,因
android debug的时候遇到的问题,该模式下无法自动垃圾回收无用对象吗 我在测试:在android应用中循环多次读取大文件。android应用程序在没有debug的时候:我发现能够自动垃圾回收,可以完成循环。而通过debug模式:应用竟然没有释放无用的垃圾对象,内存不断增加,循环了几次就报错:(appbug):globlereferencet
android中listview问题 大家好,我现在遇到一个问题。当listview滑动到底部时,屏幕的顶部(也就是listview的顶部)显示一个按钮。我刚开始是监听到listview滑动到底部时,将顶部隐藏的按钮显示,这个过程中会有点抖动,就是界面不是太流畅,因为当按钮隐藏时,listview会刷新,占据原来按钮的位置。谁有好的解决方法,能使这个过程流畅一点。
------解决方案-----
Android中lint问题 Android中AndroidlintPreferences和LintErrorChecking这两个窗口有什么区别?我想忽略ValidFragment,好能够自己写继承自Fragment类的构造函数。应该在哪里修改
------解决思路---------------------- 能正常运行就可以了
关于Android中WebView的问题 现在本人项目有个需求,通过不同的列表项加载不同的html。但是本人的测试代码都通不过
webView=(WebView)findViewById(R.id.webView);
webView.loadUrl(&file:///android_asset/example.html&);
为什么我将
mac 的android项目导入win7的eclipse遇到问题以及解决方法
mac 的android项目导入win7的eclipse遇到问题?
1, 点击项目的右键properties &&& Java BuildPath Libraries ,加入缺省的部分,如下图所示 : &nbs
Android 基于openfire即时聊天开发遇到的闪退问题:Already Login to Server 在Android客户端开发openfire即时聊天的时候,需求中有切换不同的用户的要求。
(注册用户没有问题)
登录的时候我是这样做的:connectServer--&login
下线的时候我是这么做的:disConnectServer
如果是有一个用户切
Cordova Android中ShowTitle的问题
根据官方文档的描述,要想显示TitleBar需要在config.xml中做如下设置(默认是false):
&preference name=&ShowTitle& value=&true&/&
http://cordova.apache.org/docs/en/3.4
从Android驱动到HAL到JNI到SERVICE遇到的问题,求交流谢谢。 本人新手入手Android不到一个月,面对一个这样的一个项目:为Android系统添加CAN总线驱动,然后添加硬件抽象层(HAL),然后添加java本地接口(JNI),然后添加应用程序服务框架service,最后编写APP和电脑通信。。。
关于android中植入广告的问题 1.广告代码必须要在ACTIVITY中注册吗?如果可以不用注册的话,有没有纯代码的方式解决?
2.APK如何审核,是广告商对APK进行签名,如何进行统计计费,是不是类似于百度链接的计费方式,点击一下,计算一下费用?
------解决方案-------------------- 直接广告联盟来的简单啊,比如百度/google
------解决方案------
唤醒锁: 检测 Android* 应用中的 No-Sleep(无法进入睡眠)问题
作者:philippe-michel
如果 Android* 应用使用唤醒锁不当,将会显著增加电池耗电量。 在本文中,我们将介绍一些提示和技巧,帮助您了解如何确认与误用唤醒锁有关的 No Sleep 漏洞。
1. 介绍 2. 唤醒锁 2.1. 唤醒锁简介 2.2. Android 用户唤醒锁 2.3
android studio 0.8.1使用和遇到问题解决
谷歌6月底发布了五大系统,并且android studio同步升级到了android studio 0.8.1。升级了的android studio确实有一些新的变化,运行速度变快,并且还可以选择开发不同的产品,本着尝试新技术的心情,过了一把瘾。现在和大家一起来看看。 由于GFW封了google,所以现在android studio可能
Android中service的问题 我在自己的应用中开启了一个服务然后打开任务管理器直接把我的应用划掉
然后就看到我的服务消失了几秒(因为在里面开启了一个timer一直在打印输出所以看得出来)
然后才又一次重新启动
我想要关闭自己的应用而开启的服务不会中断几秒应该怎么做?
系统是魅族flymeOS&nb
Android编译ffmpeg遇到的问题、解决方法、相关文件和编译全过程
目录: 1.编译的详细步骤和相关文件 2.可能出现的错误及解决 2.1执行 configsh出错提示bad interpreter No such file or directory
2.2执行 ndk-build出错提示libavcodecavmk1 missing separator Stop
win7安装android studio遇到问题 求指点 安装andriodstudio遇到'tools.jar'seemstobenotinAndroidStudioclasspath.
PleaseensureJAVA_HOM
eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load
eclipse中打开后新建Android项目区仍无法创建,出现下列提示对话框:
Plug-in org.eclipse.ajdt.ui was unable to load class org.ec
mac下安装android studio 遇到问题及解决方案
最近学习android 开发,由于官方提供androidstudio,就尝试的用了下,在ubuntu下,用着没什么问题。这两天在家用mac来配置系统,发现步履艰难。先把解决问题纪录如下,以便提醒自己,随便可能会帮助到和我遇到相同问题
求助,关于Android开发中Activity跳转无法实现的问题。
本人是Android新手,但喜欢Android开发。但现在遇到个问题,还望各位帮忙解惑~十分感激! 先说一下我的练习小项目的内容吧。是以个登录系统,有两个界面,MainActivity(登录)和Registe(注册)。
关于android应用退出的问题
看到很多关于应用退出的问题,今天在这里为大家简单总结一下,如果说的不对还望大家见谅。 方法一:System.exit(0) 和android.os.Process.killProcess(android.os.Process.myPid()),我想很多人都尝试过,当关 闭多个Activity的时候这两个方法根本不起作用,原因当然和Activity的堆栈管理有关
关于Android Framework层文件操作的问题 目前在做一个类似于位置采集的东西,想法是直接修改frameworks/base下的location,每次locationManager获取位置信息时,将位置信息保存到一个文件中,但是在实现读写文件时遇到问题(用的是Java的File类),并没有成功创建文件,不知道是不是和文件操作的权限有关
所以我想问的就是在framework层进行文件的读posts - 21,&
comments - 27,&
trackbacks - 0
Android横竖屏切换小结
(老样子,图片啥的详细文档,可以下载后观看&)
Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭,操作界面如下
只需要点击下&屏幕旋转&按钮就可以关闭横竖屏切换了。
一、禁止APP内横竖屏切换
上述设置更改的是整个手机的横竖屏切换,当手机没有关闭横竖屏切换功能时,系统一旦触发横竖屏切换,缺省状态下,当前活动的App的界面就会进行横竖屏切换,由于横竖屏的界面尺寸等参数不同,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就需要通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。
该android:screenOrientation属性,他有以下几个参数:
"unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
"landscape":横屏显示(宽比高要长)
"portrait":竖屏显示(高比宽要长)
"user":用户当前首选的方向
"behind":和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
"sensor":有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
"nosensor":忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。
比如下列设置
android:screenOrientation="portrait"
则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。
android:screenOrientation="landscape",为横屏显示。
上述修改也可以在Java代码中通过类似如下代码来设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
二、APP的横竖屏切换可以手动触发吗
由上面描述可知,当android:screenOrientation为默认值"unspecified"或"sensor"等时,就会有系统根据设备的旋转情况来触发横竖屏的切换,那么有没有方法我们手动在程序中触发横竖屏的变换呢,显然上面为我们提供的setRequestedOrientation就是系统提供的一个入口,下面我们给出一个按键的方式来触发的案列:
public class MainActivity extends Activity implements OnClickListener {
&&&& private Button mBtnL
&&&& private Button mBtnP
&&&& @Override
&&&& protected void onCreate(Bundle savedInstanceState) {
&&&& &&& super.onCreate(savedInstanceState);
&&&& &&& setContentView(R.layout.activity_main);
&&&& &&& mBtnLandscape = (Button) findViewById(R.id.but_landscape);
&&&& &&& mBtnPortrait = (Button) findViewById(R.id.but_portrait);
&&&& &&& mBtnLandscape.setOnClickListener(this);
&&&& && &mBtnPortrait.setOnClickListener(this);
&&&& @Override
&&&& public void onClick(View v) {
&&&&&&&&&&&&&&&& // TODO Auto-generated method stub
&&&&&&&&&&&&&&&& if(v == mBtnLandscape){
&&&&&&&&&&&&&&&&&&&&&&&&&&&& setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
&&&&&&&&&&&&&&&& }else{
&&&&&&&&&&&&&&&&&&&&&&&&&&&& setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
&&&&&&&&&&&&&&&& }
&&&& @Override
&&&& public void onConfigurationChanged(Configuration newConfig) {
&&&& &&& super.onConfigurationChanged(newConfig);
&&&& &&& String message=newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE ? "屏幕设置为:横屏" : "屏幕设置为:竖屏";
&&&& &&& Toast.makeText(this, message, Toast.LENGTH_LONG).show();
需要注意的是,手动调用时,无视AndroidManifest中关于screenOrientation的设置;另外上述代码中的onConfigurationChanged要被调用到也是需要条件的,在这里,只给代码,不做讨论,后面再给出一个相关的补充说明。
三、重启Activity的横竖屏切换
在上面的案列中,缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-& onStop-& onDestory-& onCreate-&onStart-&onResume操作,从而销毁原来的Activity对象,创建新的Activity对象,这是因为通常情况下软件在横竖屏之间切换,界面的高宽会发生转换,从而可能会要求不同的布局。具体的布局切换可以通过如下两种方法来实现:
1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序自己会调用Activity的onCreate方法,从而根据当前横竖屏情况自动加载响应的布局。
2)假如布局资源是不一样又不按照如上设置,则需要通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件(比如mainP为竖屏mainL为横屏)。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml。
protected void onCreate(Bundle icicle) {
&super.onCreate(icicle);
&int mCurrentOrientation = getResources().getConfiguration().
&if ( mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ) {
&&&& // If current screen is portrait
&&&& Log.i("info", "portrait"); // 竖屏
&&&& setContentView(R.layout.mainP);
&} else if ( mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ) {
&&&& //If current screen is landscape
&&&& Log.i("info", "landscape"); // 横屏
&&&& setContentView(R.layout.mainL);
&init();//初始化,赋值等操作
&findViews();//获得控件
&setListensers();//设置控件的各种监听方法
上面只是对布局切换做了描述,实际上由于重启Activity在未加处理的情况下必然导致数据的丢失和重新获取,这样用户体验会非常差。为此就要在切换前对数据进行保存,切换重启后对数据进行恢复,具体操作的步骤如下:
重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据
@Override&
public Object onRetainNonConfigurationInstance() {&
&&& final MyDataObject data = collectMyLoadedData();&
在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
@Override&
public void onCreate(Bundle savedInstanceState) {&
&&& super.onCreate(savedInstanceState);&
&&& setContentView(R.layout.main);&
&&& final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();&
&&& if (data == null) {&
&&&&&&& data = loadMyData();&
四、非重启Activity的横竖屏切换
虽然重启Activity为我们提供了保存数据和读取数据的方式,但是如此一来程序会显得有些繁琐,所以有时候程序员往往就不想让Activity重启,Android也为我们提供了解决方案,就是通过onConfigurationChanged拦截横竖屏变换,从而进行必要的重新布局和切换操作。操作步骤如下:
首先,manifest中为相应的Activity设置android:configChanges属性,从而让Activity不延续上述的重建流程,具体如下:
Andorid 3.2以前的SDK可以使用如下配置
android:configChanges="orientation|keyboardHidden"
而Adnroid 3.2以后的SDK必须添加一个screenSize属性,具体如下
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="orientation|screenSize"
关于configChanges的详细描述,后面有个简单补充章节,这里不做过多展开。
其次,在Activity或View的onConfigurationChanged(Configuration newConfig)函数中获取当前横竖屏参数。至于其调用顺序跟touch事件的传递顺序相似,不过他没有消费事件的概念,会顺次调用到每一个onConfigurationChanged函数。下面是重写Activity的例子:
//布局分别在layout-land和layout-port目录中的同名main.xml时
public void onConfigurationChanged (Configuration newConfig){
&&& super.onConfigurationChanged(newConfig);
&&& setContentView(R.layout.main);
&&& //注意,这里删除了init(),否则又初始化了,状态就丢失
&&& findViews();
&&& setListensers();
//布局为不按照layout-land和layout-port目录,而自定义名字时
public void onConfigurationChanged (Configuration newConfig){
&&& super.onConfigurationChanged(newConfig);
&&& int mCurrentOrientation = getResources().getConfiguration().
&&& if ( mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ) {
&&&&&&& // If current screen is portrait
&&&&&&& setContentView(R.layout.mainP);
&&&&&&& //注意,这里删除了init(),否则又初始化了,状态就丢失
&&&&&&& findViews();
&&&&&&& setListensers();
&&& } else if ( mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ) {
&&&&&&& //If current screen is landscape
&&&&&&& setContentView(R.layout.mainL);
&&&&&&& //注意,这里删除了init(),否则又初始化了,状态就丢失
&&&&&&& findViews();
&&&&&&& setListensers();
当然有时候连布局都不用更改的话,就可以直接对原有控件进行调用操作了,比如:
public class MainActivity extends Activity {
&&& private TextView textV
&&& @Override
&&& public void onCreate(Bundle savedInstanceState) {
&&&&&&& super.onCreate(savedInstanceState);
&&&&&&& setContentView(R.layout.main);
&&&&&&& Log.i("--Main--", "onCreate");
&&&&&&& textView=(TextView)findViewById(R.id.tv_id);
&&& @Override
&&& public void onConfigurationChanged(Configuration newConfig) {
&&&&&&& super.onConfigurationChanged(newConfig);
&&&&&&& Log.i("--Main--", "onConfigurationChanged");
&&&&&&& if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
&&&&&&&&&&& textView.setText("当前屏幕为横屏");
&&&&&&& }else{
&&&&&&&&&&& textView.setText("当前屏幕为竖屏");
需要注意的是,onConfigurationChanged函数中只能获得横竖屏切换后的参数,在该函数中获取不到新的Layout和控件的尺寸位置信息,如果要处理尺寸和位置信息,必须通过消息异步或者延时调用,下面是一个App在横竖屏切换时需要重新设置popupWindow位置的代码:
protected void onConfigurationChanged(Configuration newConfig) {
&&& super.onConfigurationChanged(newConfig);
&&& //View中不用创建Handler,可直接调用post操作
&&& //new Handler().postDelayed(new Runnable() {
&&& //&&& @Override
&&& //&&& public void run() {
&&& //&&&&&&& updatePopup();&&&&
&&& //&&& }
&&& //}, 500);
&&& postDelayed(new Runnable() {
&&&&&&& @Override
&&&&&&& public void run() {
&&&&&&&&&&& updatePopup();&&&&& //
&&& }, 500);//如果不在post中,而是直接调用,那么弹出位置就会有问题
虽然上面没有看到对布局的显式调用进行重新布局,照理控件的对象没有被销毁,但是控件在横竖屏切换时应该是需要进行重新layout和measure,然后再进行重绘的,否则不会引发弹出框位置的变化,至于如何调用重新layout、measure和Draw操作,在这里就不多展开了。
五、对于AndroidManifest.xml设置的补充
经过上面代码演示,我们可以看到具体实现涉及到了Manifest工程配置里面具体Activity的screenOrientation和configChanges两个参数,这两个参数screenOrientation的优先级是高于configChanges,即假如screenOrientation设置为固定横竖屏时,那么configChanges参数无论怎么设都没有办法引发横竖屏切换,除非在代码中手动调用setRequestedOrientation函数进行修改。
screenOrientation属性在前面已经讲过了,而关于configChanges属性设置有如下选项:
IMSI移动台的国家代码(MCC)发生变化&&一个SIM被探测到并且更新MCC
IMSI移动台的网络代码(MNC)发生变化&&一个SIM被探测到并且更新MNC
区域发生变化&&用户选择了一个文本需要显示的新语言
touchscreen
触摸屏发生变化。(这个通常不会发生。)
键盘类型发生变化&&例如:用户插入了外接键盘。
keyboardHidden
键盘的可访问性发生变化&&例如:用户发现了硬件键盘。
navigation
导航类型(轨迹球或dpad)发生变化。(通常不会发生。)
screenLayout
屏幕布局发生变化&&这个会导致显示不同的Activity。
字体缩放因子发生变化&&用户选择了新的字体大小。
当UI模式发生改变的时候&&当用户放置设备到桌子或/汽车或夜间模式改变的时候可以引起UI模式变化。阅读UiModeManager。在API级别8时引入。
orientation
屏幕方向发生变化&&用户旋转了屏幕。注意:如果应用程序的目标API级别是13或更高(通过属性minSdkVersion和属性targetSdkVersion声明),你也需要声明配置项screenSize,因为这将在设备选择肖像和屏幕方向时发生改变。
screenSize
当前可用屏幕大小发生变化。这代表一个当前可用大小的变化,和当前的比率相关,因此当用户选择不同的画面和图像,会发生变化。然而,如果你的程序目标API级别是12或更低,你的Activity总是会自己处理这个配置变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)。在API级别13里加入的。
smallestScreenSize
物理屏幕大小的变化。不管方向的变化,仅仅在实际物理屏幕打包变化的时候,如:外接显示器。这个配置项的变化引起在smallestWidth configuration里的变化。然而,如果你的程序目标API级别是12或更低,你的Activity将自己处理这个变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)在API级别13里加入的。
layoutDirection
布局方向变化。例如书写方式从左向右(LTR)转换为从右向左(RTL)
从上述这个表我们可以看到除了横竖屏,包括语言、网络、键盘和外设等变化都可以被onConfigurationChanged函数监控到,具体的内容和释义还是查看官方英文文档吧,详见如下链接
中文翻译可以查阅
结合网上的整理,小结跟这几配置相关的情景:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次(我在三星4.0设备上发现切横屏和竖屏都是执行一次,而并非这里说的有执行两次的情况,不知道是否以前版本手机会这样?);
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
注:上述描述是在Android3.2以前,如果缺少了keyboardHidden选项,不能防止Activity的销毁重启,也就不能执行onConfigurationChanged方法了。在3.2之后,必须加上screenSize属性才可以屏蔽调用Activity的生命周期(我在一些设备上亲测可以不需要keyboardHidden,只要screenSize就可以了,但是保险起见还是继续保留keyboardHidden吧)。
六、对于setRequestedOrientation函数的补充说明
在上述(二)对于手动触发横竖屏切换的时候,我们用到了setRequestedOrientation,那时只是简单做了下演示,后来发现还是需要做下补充说明的:
首先在非重启Activity模式下
手动调用setRequestedOrientation之后,假如会引发横竖屏切换(即请求的横竖屏要求与当前的横竖屏情况不一致,就会引发切换),那么会立即调用onConfigurationChanged函数;假如不会引发横竖屏切换(请求前后一致),那么也就不会调用到onConfigurationChanged函数。
这个手动调用setRequestedOrientation的地方也可以在Activity中的任何地方,即也可以在onConfigurationChanged中调用,但是一旦指定为横屏或竖屏完成这个变换之后,后面不论屏幕如何进行怎么翻转变化,都不会再触发横竖屏切换了,也即等同于在manifest中设置了android:screenOrientation属性为横屏或竖屏。如果要恢复为响应横竖屏随物理传感器设备变换,那么就需要手动调用类似如下代码进行恢复:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
其次在重启Activity模式下
手动调用setRequestedOrientation发出横竖屏设定请求之后,假如需要进行横竖屏切换(即请求前后横竖屏状态不一致),则会对Activity进行销毁并重启;假如不需要需要进行横竖屏切换,则Activity维持现状不变;
手动调用setRequestedOrientation一次,完成变换之后,也跟上面非重启一样,相当于在manifest中设置了android:screenOrientation属性为横屏或竖屏。要想恢复也需要重新调用类似上面非重启的调用。
在这样一个原理下,就有了对如下一种需求的解决方案:
让App启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,然后手机切换横竖屏就不能用了该怎么解决呢?
网上给出了一个例子代码,这里就不做摘抄了,有兴趣可以试一下,然后对比一下人家的实现方式,具体见如下链接
另外再给出几个我做整理时参考的帖子,觉得对我帮助很大,分别如下
Android横屏竖屏切换的问题(一个总结帖,还是不错的)
解决Android手机屏幕横竖屏切换(一个真实测试过的小结)
Android 处理横竖屏切换事件
阅读(...) 评论()}

我要回帖

更多关于 android监听屏幕休眠 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信