关于android “shake shake 摇摆 摇摆”的实现与优化(An-Beer工作室)

关于android “shake shake 摇摆 摇摆”的实现与优化(An-Beer工作室)
关于android “shake shake 摇摆 摇摆”的实现与优化(An-Beer工作室)

关于android “shake shake 摇摆摇摆”的实现与优化

最近在开发一个基于android操作系统的播放器,根据我抽风一样的设计理念“更少,更大的按钮”,在第二次更改UI后,主界面的按钮被缩减成3个:帮助按钮,播放/暂停以及音量控制预计这三个按钮还会再一次缩减的,到2个,甚至一个,反正这就是我的“UI设计思想”,我觉得挺好看的。

删是删了,关键是如何实现被删按钮的功能……

打开文件的这一步,我是使用"shake"这个动作来实现的,摇摆一下手机,之前编写好的一个打开文件的activity就会被启动

在SDK中,google提供了这样一个接口,我们可以使用

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorListener;

import android.hardware.SensorManager;

看这几个包的名字就可以大体的知道,这与sensor有关

在我的相关activity实现SensorListener接口

public class HelloBear extends Activity implements SensorListener

这里我得到了一个警告,google不建议你使用这个接口,建议你换另外一个可以实现相同功能的……额~算了,就用这个吧……哈哈

之后,在oncreate中注册一下下

SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); sensorMgr.registerListener((SensorListenerthis,SensorManager.SENSOR_ACCELEROMETER ,SensorManager.SENSOR_DELAY_GAME);

根据接口的名称,既然是监听,那就需要对于动作的判断……

当时在写这一段的时候,借鉴刊载在javaeye上的一段,非常抱歉我把作者名字给忘记了……但是大体的实现过程是:

因为这个接口中,并没有专门用于shake动作的判断,而是仅仅给出了x y z 的一个三维的矢量,思路是,间隔的测量这个三维的矢量,然后求出一个变化速度~ (定义三方向都有变化速度才叫摇摆),当这个速度达到了某个临界值的时候,动作被触发,我的动作是,intent 到另一个activity

其实想到这里,我觉得应该没有什么大问题了,当实现了之后,才发现,一个非常非常严重失误,甚至是错误。

我们知道,在用户摇摆手机的时候,不可能速度的最大值是你设定的临界值,一般情况是,在到达临界值之后,速度还会增长,如果不加以控制的话,这个动作可能会被连续的执行

在不加控制的情况下,我试验的结果是:我的intent基本平均要被执行3-5次……

如何解决这个问题呢?或许我的解决方案没有普适性,因为我并没有完全基于在一个activity里面解决问题,但是可以供参考~因为我们要做的很多意图都是activity之间切换

在监听判断时加入一个boolean 标志,常态下为true ,在打开(动作发生)后,置为flase,在(动作打开)的activity被销毁后,再置为true,这里需要用到activityForResult

如:intent.setClass(HelloBear.this, ChooseBear.class);

HelloBear.this.startActivityForResult(intent, 0);

然后在onActivityResult中置标志为常态

问题得以解决

最后,贴一下,实现shake的核心代码~基本和javaeye上的一样,只是进行了上述优化(这个算法本身很简单很直观但是很SB~我希望找到更强大的算法)

public void onSensorChanged(int sensor,float[] values)

{

if (sensor == SensorManager.SENSOR_ACCELEROMETER) {

long curTime = System.currentTimeMillis();

// 每10毫秒检测一次

if ((curTime - lastUpdate) > 100) {

long diffTime = (curTime - lastUpdate);

lastUpdate = curTime;

x = values[SensorManager.DATA_X];

y = values[SensorManager.DATA_Y];

z = values[SensorManager.DATA_Z];

float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

if (speed > SHAKE_THRESHOLD&& shakable ==true )

{

Intent intent = new Intent();

intent.setClass(HelloBear.this, ChooseBear.class);

HelloBear.this.startActivityForResult(intent, 0);

shakable = false;

cancelDelayHide();

}

last_x = x;

last_y = y;

last_z = z; }

}

}

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

Android 应用程序内存泄漏的分析

Android 应用程序内存泄漏的分析以前在学校里学习Java的时候,总是看到说,java是由垃圾收集器(GC)来管理内存回收的,所以当时形成的观念是Java不会产生内存泄漏,我们可以只管去申请内存,不需要关注内存回收,GC会帮我们完成。呵呵,很幼稚的想法,GC没那么聪明啊,理论及事实证明,我们的Java程序也是会有内存泄漏的。 (一)Java内存泄漏从何而来 一般来说内存泄漏有两种情况。一种情况如在C/C++语言中的,在堆中的分配的内存,没有将其释放,或者是在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指针重新赋值);另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解决。所以,Java中的内存泄漏,主要指的是第二种情况。 (二)需要的工具 1.DDMS—Update heap Gause GC Heap 是DDMS自带的一个很不错的内存监控工具,下图红色框中最左边的图标就是该 工具的启动按钮,它能在Heap视图中显示选中进程的当前内存使用的详细情况。下图 框中最右边的是GC工具,很多时候我们使用Heap监控内存的时候要借助GC工具,点 击一次GC按钮就相当于向VM请求了一次GC操作。中间的按钮是Dump HPROF file,它 的功能相当于给内存拍一张照,然后将这些内存信息保存到hprof文件里面,在使用我 们的第二个工具MAT的时候会使用到这个功能。 2.MAT(Memory Analyzer Tool) Heap工具能给我们一个感性的认识,告诉我们程序当前的内存使用情况和是否存在内存 泄漏的肯能性。但是,如果我们想更详细,更深入的了解内存消耗的情况,找到问题所 在,那么我们还需要一个工具,就是MAT。这个工具是需要我们自己去下载的,可以下 载独立的MAT RCP 客户端,也可以以插件的形式安装到Eclipse里面,方便起见,推荐 后者。 安装方法: A.登录官网https://www.360docs.net/doc/909553674.html,/mat/downloads.php B.下载MAT Eclipse插件安装包(红框所示,当然你也可是选择Update Site在线安装,个人觉得比较慢)

android考试复习题

一、解答题 1.Android应用程序的4大组件是什么? Activity、Broadcast Receiver、Content Provider、Service 2.请介绍下Android中常用的五种布局。 相对布局(RelativeLayout):相对布局中可以设置某一个视图相对于其他视图的位置,包括上、下、左、右。 线性布局(LinearLayout):线性布局可分为水平线性布局和垂直线性布局。水平线性布局所有在这个布局中的视图都沿着水平方向线性排列。垂直线性布局则沿着垂直方向线性排列。 框架布局(FrameLayout):所有添加到框架布局中的视图都是以层叠的方式显示,这种显示方式类似堆栈。 表格布局(TableLayout):表格布局可以将视图按行、按列进行排列。 绝对布局(AbsoluteLayout):可以任意设置视图定位位置。 3. activity一般会重载7个方法用来维护其生命周期,除了 onCreate(),onStart(),onDestory() 外还有onrestart,onresume,onpause,onstop 4. 当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行的回调函数是startActivityResult() 5.什么是Intent? Intent(意图)主要是解决Android应用的各项组件之间的通讯。 Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。 启动Activity方式: 显式启动,必须在Intent中指明启动的Activity所在的类 Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); startActivity(intent); 6.Broadcast有哪几种?区别? 实现广播的方法有两种。一种是在androidmanifest.xml当中去注册广播,另一种方法是在代码中动态注册广播,这两种方法虽然都能实现广播机制,但是还是有很大不同,所以运用也要分情况。如果我们在androidmanifest.xml中去定义的话,那么该广播是在activity 结束之后也不会结束的,原因在于它已经写在了manifest.xml文件当中,也就是注册到了系统当中,所以无论你的activity是否存在,对于该广播没有影响。而在java代码中动态注册广播,在该activity结束后,我们可以注销该广播,也就是它随着activity的消失而消失 7. Adapter有什么作用?常见的Adapter有哪些? 答:Adapter是连接后端数据和前端显示的适配器接口。常见的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapte r, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapte r, WrapperListAdapter等。

android考试选择题复习进程

1、在android程序中,Log.w()用于输出什么级别的日志信息?( C) A、调试 B、信息 C、警告 D、错误 2、在Activity中需要找到一个id是bookName的的TextView组件,下面哪种语句写法是正确的?( C) A、TextView tv = this.findViewById(R.id.bookName); B、TextView tv = (TextView)this.findViewById(R.id.code); C、TextView tv = (TextView)this.findViewById(R.id.bookName); D、TextView tv = (TextView)this.findViewById(R.string.bookName); 3、如果将一个TextView的android:layout_height属性值设置为wrap_content,那么该组件将是以下哪种显示效果?( D) A、该文本域的宽度将填充父容器宽度 B、该文本域的宽度仅占据该组件的实际宽度 C、该文本域的高度将填充父容器高度 D、该文本域的高度仅占据该组件的实际高度 4、给一个TextView设置红色字体,应该使用以下哪种写法?(A ) A、setTextColor(0xffff0000); B、setColor("0xffff0000") C、setTextColor("0xffff0000") D、setColor("red") 5、对于一个Activity,在AndroidManifest.xml中对他这样进行定义 ,这样的描述代表什么含义?(B) A、无明确含义,每个Activity都需要这样定义 B、代表该Activity将作为程序的主Activity,并且在LAUNCHER菜单中启动 C、代表该Activity将在桌面上建立图标并启动 D、代表该Activity的优先级高于其他的Activity 6、在Android应用程序中,图片应放在那个目录下?(D ) A、raw B、values C、layout D、drawable 7、关于AndroidManifest.xml文件,以下描述错误的选项有哪些?(A ) A、在所有的元素中只有是必需的,且只能出现一次 B、处于同一层次的元素,不能随意打乱顺序 C、元素属性一般都是可选的,但是有些属性是必须设置的

Android编程基础笔试题及标准答案

Android编程基础笔试题及答案

————————————————————————————————作者:————————————————————————————————日期:

《Android 编程基础》试卷A 注意事项: 1. 本试卷共8页,满分100分; 2. 请把学院、姓名、班级写到密封线内,考试时间90分钟; 3. 请不要把答案写在密封线内 得分 阅卷人 一、单选题(共35题,共61分) 1、 D03MA057(2分)退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个函数中进行 a A 、onPause() B 、onCreate() C 、onResume() D 、onStart() 2、 D02MA058 (2分) Android 项目工程下面的 assets 目录的作用是什么 b A 、放置应用到的图片资源。 Res/drawable B 、主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面 C 、放置字符串,颜色,数组等常量数据 res/values D 、放置一些与 UI 相应的布局文件,都是 xml 文件 res/layout 3、 D04MA059 (2分)下列不属于android 布局的是(c) A 、F r a m e L a y o u t B 、L i n e a r L a y o u t C 、BorderLayout D 、T a b l e L a y o u t E 、R e l a t i v e L a y o u t 4、 D08MA2060 (2分)Intent 的作用的是 a A 、intent 是连接四大组件的纽带,可以实现界面间切换,可以包含动作和动 作数据, B 、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行, 而不会因为切 换页面而消失 service C 、实现应用程序间的数据共享 contentprovider D 、处理一个应用程序整体性的工作 5、 D04EA1061(1分) 下列哪个是AbsoluteLayout 中特有的属性 b A,android:layout_height B,android:layout_x C,android:layout_above D,android:layout_toRightOf 6、 D07EA1062(1分)RatingBar 组件中不能用属性直接设置的是d A,五角星个数 B,当前分数C,分数的增量D,五角星的色彩 7、 D 10EA1063(1分) 在手机开发中常用的数据库是_a__ A,sqlLite B,Oracle C,Sql Server D,Db23 8、 D14MA2064(2分) 关于BroadcastReceiver 的说法不正确的是_b_ 题号 一 二 三 总分 合分人 得分 密封线内不要答题 学院班级姓名

android如何查看cpu的占用率和内存泄漏

android如何查看cpu的占用率和内存泄漏 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描述有错误,还望高手在下面留言,非常感谢! 一、通过eclipse,ADT开发工具的DDMS来查看(Heap) 在“Devices”窗口中选择模拟器中的一个需要查看的程序,从工具条中选“Update heap”按钮,给这个程序设置上“heap Updates”,然后在Heap视图中点击Cause GC就可以实时显示这个程序的一些内存和cpu的使用情况了。

然后就会出现如下界面: 说明: a) 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作; b) 当内存使用信息第一次显示以后,无须再不断的点击“Cause GC”,Heap视图界面会定

时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化; c) 内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。 大致解析如下: 这个就是当前应用的内存占用,allocated 是已经分配的内存free是空闲内存, heap size 是虚拟机分配的不是固定值 heap size 的最大值跟手机相关的 有网友说, 一般看1byte的大部分就是图片占用的 如何判断应用是否有内存泄漏的可能性呢? 如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断: a) 不断的操作当前应用,同时注意观察data object的Total Size值; b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平; c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC 后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大, 直到到达一个上限后导致进程被kill掉。

《Android程序设计》期末试题B

一、判断题(每小题2分,共10分) 1、Android是J2ME的一个实现。() 2、View是ViewGroup的子类。() 3、一个Intent可以包含多个category。() 4、Android系统下的文件,可以被本系统里的所有应用程序访问。() 5、无论Service是以启动方式还是绑定方式运行,该Service类都要重写onBind 方法。() 二、单项选择题(在每小题的四个备选答案中,有且只有一个正确答案,请将正确答案的序号填在题干的括号内。每小题2分,共20分) 1、下列关于继承的哪项叙述是正确的?() A、在Java中类允许多重继承 B、在Java中一个类只能实现一个接口 C、在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口允许继承自另一个接口 2、以下哪种方式不能退出当前活动状态的Activity?() A、调用finish()方法 B、单击(返回)按钮 C、单击(回到桌面)按钮 D、Activity运行时出现异常 3、对于TextView,使用哪个属性来设置显示的文本?() A、android:textSize B、android:text C、android:textColor D、android:string 4、要处理Button的点击事件,需要注册哪个监听器?() A、OnClickListener() B、OnButtonClickListener() C、OnButtonListener() D、OnItemClickListener() 5、浏览网页使用的Intent的Action是什么?() A、ACTION_CALL B、ACTION_EDIT C、ACTION_SEND D、ACTION_VIEW 6、Android 关于启动方式的service生命周期的onCreate()和onStartCommand()方法,说法正确的是()

安卓性能优化方案

随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序。以上理由,足以需要开发人员更加专心去实现和优化你的代码了。选择合适的算法和数据结构永远是开发人员最先应该考虑的事情。同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优化文档和网上的诸多技术大牛给出的意见,整理出这份文档。 1. 内存优化 Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus o ne 对每个软件的内存限制是24M),同时Java语言本身比较消耗内存,d alvik虚拟机也要占用一定的内存空间,所以合理使用内存,彰显出一个程序员的素质和技能。 1) 了解JIT 即时编译(Just-in-time Compilation,JIT),又称动态转译(Dynamic Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。Android原来Dalvik虚拟机是作为一种解释器实现,新版

(Android2.2+)将换成JIT编译器实现。性能测试显示,在多项测试中新版本比旧版本提升了大约6倍。 详细请参考https://www.360docs.net/doc/909553674.html,/cool_parkour/blog/item/2802b01586e22cd8a6ef3f6b. html 2) 避免创建不必要的对象 就像世界上没有免费的午餐,世界上也没有免费的对象。虽然gc为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。所以,除非必要,应尽量避免尽力对象的实例。下面的例子将帮助你理解这条原则: 当你从用户输入的数据中截取一段字符串时,尽量使用substring函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝。这样你就有一个新的String对象,它与原始数据共享一个char数组。如果你有一个函数返回一个String对象,而你确切的知道这个字符串会被附加到一个Stri ngBuffer,那么,请改变这个函数的参数和实现方式,直接把结果附加到StringBuffer中,而不要再建立一个短命的临时对象。 一个更极端的例子是,把多维数组分成多个一维数组: int数组比Integer数组好,这也概括了一个基本事实,两个平行的int数组比(int,int)对象数组性能要好很多。同理,这试用于所有基本类型的组合。如果你想用一种容器存储(Foo,Bar)元组,尝试使用两个单独的Foo[]

Android移动应用试题(带答案)

<>试题 一.选择题(2’X12) 1.下面哪一个不属于Android体系结构中的应用程序层 A.电话簿 B.日历 C.SQLite D.SMS程序 2.下面哪种说法不正确 A.Android应用的gen目录下的R.java被删除后还能自动生成; B.res目录是一个特殊目录,包含了应用程序的全部资源,命名规则可以支持数字(0-9) 下横线(_),大小写字母(a-z , A-Z); C.AndroidManifest.xml文件是每个Android项目必须有的,是项目应用的全局描述。其 中指定程序的包名(pack age=”…”)+指定android应用的某个组件的名字(android:name=”…”)组成了该组件类的完整路径 D.assets和res目录都能存放资源文件,但是与res不同的是assets支持任意深度的子目 录,在它里面的文件不会在R.java里生成任何资源ID 3.在一个相对布局中怎样使一个控件居中 A.android:gravity="center" B.android:layout_gravity="center" C.android:layout_centerInParent="true" D.android:scaleType="center" 4.下面是一段生成对话框的代码,哪一行有错误? Builder builder = new Builder(getApplicationContext()); 1 builder.setTitle("提示").setMessage("请选择"); 2 builder.setPositiveButton("重置", new OnClickListener() 3 { 4 public void onClick(DialogInterface dialog, int which) 5 { 6 Log.i("log", "重置被按了!"); 7 } 8 }); 9 builder.setNegativeButton("取消", null); 10 builder.setNeutralButton("确定", new OnClickListener() 11 { 12 public void onClick(DialogInterface dialog, int which) 13 { 14 Toast.makeText(getApplicationContext(), "确定被按了!", 15 Toast.LENGTH_SHORT).show(); 16 } 17

Android开发技术期末考试复习题

试题 一、选择题 1 android虚拟设备的缩写是(A VD) 2 Android SDK目前支持的操作系统(Linux) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4 Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 7下列不是Activity的生命周期方法之一的是() onCreate onStart onRestart onResume onPause onStop onDestroy 8 以下可以做EditText编辑框的提示信息是(adroid:hint) 以下不是手机操作系统的是(windows vista) 下列哪个属性是专用于相对布局的(D) A.android.orientation 线性vertical 垂直horizontal B.android:stretchColumns C.android:layout_alignParentRight D.android:layout_toRightOf 定义LinearLayout垂直方向布局时设置的属性( D ) A.android:layout_height B.android:gravity C.android:layout D. android:orientation vertical 垂直 为了使android适应不同分辨率的机型,布局时字体单位应用( D ) A.dp B.dip 像素 C.px D.sp 下面属于android的动画分类的有( AB) A.Tween B.Frame C.Draw D.Animation Property Animation属性动画android 关于service生命周期的onCreate()和onStart()说法正确的是( AD ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法 在android中使用Menu时可能需要重写的方法有(AC) A、onCreateOptionsMenu() 三种菜单:选项菜单、上下文菜单、子菜单 B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected() Intent传递数据时,下列的数据类型哪些可以被传递(ABCD) A、Serializable B、charsequence C、Parcelable D、Bundle java.io包中的( A )和( B )类主要用于对对象Object的读写。 A. objectInputStream B. objectOutPutStream C.Reader D.writer 继承ContentProvider需要实现(ABCD)等方法。 A. insert B. delete C. update D. query

安卓试题

一.选择(每题两分,共20分) 1.下面退出Activity错误的方法是(C) A、finish() C、() B、抛异常强制退出 D、onStop() 2.一个android工程中以.java作为后缀的源文件在以下哪个路径下?(D) 3.安卓工程的res/layout/路径下放的以.xml作为后缀的文件是(A) A.界面布局文件 B.源代码文件 C.视频文件 D.音频文件 4.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的 机器就会变得越慢,那么线程销毁的方法是(A) A、onDestroy() C、onFinish() B、onClear() D、onStop() 5.下面在文件中注册BroadcastReceiver方式正确的是 (A) A、 B、 android:name=""/> C、 D、 android:name=""/> 6. android 关于service生命周期的onCreate()和onStart()说法正确的是 (B) A、当第一次启动的时候不会调用onCreate()方法

Android内存优化小建议 以及活用(SoftReference 和 WeakReference )

android因其系统的特殊性,安装的软件默认都安装到内存中,所以随着 用户安装的软件越来越多,可供运行的程序使用的内存越来越小,这就要求我们在开发android程序时,尽可能的少占用内存。根据我个人的开发经验总结了如下几点优化内存的方法: 1创建或其他方式获得的对象如不再使用,则主动将其置为null。 2尽量在程序中少使用对图片的放大或缩小或翻转.在对图片进行操作时占用的内存可能比图片本身要大一些。 3调用图片操作的后,及时的清空,调用recycle()提醒经行垃圾回收。 4尽可能的将一些静态的对象(尤其是集合对象),放于SQLite数据库中。并且对这些数据的搜索匹配尽可能使用sql语句进行。 5一些连接资源在不使用使应该释放,如数据库连接文件输入输出流等。应该避免在特殊的情况下不释放(如异常或其他情况) 6一些长周期的对像引用了短周期的对象,但是这些短周期的对象可能只在很小的范围内使用。所以在查内存中也应该清除这一隐患。如果你想写一个Java程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个reference记住此对象,以便随时观察,但是却因此造成此对象的reference数目一直无法为零,使得对象无法被清除。 https://www.360docs.net/doc/909553674.html,ng.ref.WeakReference 不过,现在有了Weak Reference之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那

么你应该用Weak Reference来记住此对象,而不是用一般的reference。 A obj=new A(); WeakReference wr=new WeakReference(obj); obj=null; //等待一段时间,obj对象就会被垃圾回收 … if(wr.get()==null){ System.out.println(“obj已经被清除了“); }else{ System.out.println(“obj尚未被清除,其信息是 “+obj.toString()); } … 在此例中,透过get()可以取得此Reference的所指到的对象,如果传出值为null的话,代表此对象已经被清除。 这类的技巧,在设计Optimizer或Debugger这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以影响此对象的垃圾收集。 https://www.360docs.net/doc/909553674.html,ng.ref.SoftReference Soft Reference虽然和Weak Reference很类似,但是用途却不同。被Soft Reference指到的对象,即使没有任何Direct Reference,也不会被清除。一直要到JVM内存不足时且没有Direct Reference

Android选择题

一、单选题(共10题,共24分) 1、退出activity 对一些资源以及状态的操作保存,可以在生命周期的哪个函数中进行___ A、onPause() B、onCreate() C、onResume() D、onStart() 2、Android 项目工程下面的assets 目录的作用是什么____ A、放置应用到的图片资源。Res/drawable B、主要放置一些文件资源,这些文件会被原封 不动打包到apk 里面 C、放置字符串,颜色,数组等常量数据res/values D、放置一些与UI 相应的布局文件, 都是xml 文件res/layout 3、下列不属于android布局的是___ A、FrameLayout B、LinearLay out C、BorderLayout D、Ta bleLa you t E、RelativeL ay out 4、Intent 的作用的是 ____ A、intent是连接四大组件的纽带,可以实现界面间切换,可以包含动作和动作数据, B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换 页面而消失 service C、实现应用程序间的数据共享 contentprovider D、处理一个应用程序整体性的工作 5、下列哪个是AbsoluteLayout中特有的属性____ A,android:layout_height B,android:layout_x C,android:layout_above D,android:layout_toRightOf 6、RatingBar组件中不能用属性直接设置的是_____ A,五角星个数B,当前分数C,分数的增量D,五角星的色彩 7、在手机开发中常用的数据库是_____ A,sqlLite B,Oracle C,Sql Server D,Db2 8、使用MediaPlayer播放保存在sdcard上的mp3文件时____ A,需要使用MediaPlayer.create方法创建MediaPlayer B,直接newMediaPlayer即可 C,需要调用setDataSource方法设置文件源 D,直接调用start方法,无需设置文件源 9、在android中使用RadioButton时,要想实现互斥的选择需要用的组件是___ A,ButtonGroup B, RadioButtons C,CheckBox D,RadioGroup 10、在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法?______ A, ContentResolver B, ContentProvider C, Cursor D, SQLiteHelper 11、DDMS中Log信息分为几个级别____ A,3 B,4 C,5 D,6 12、能够自动完成输入内容的组件是___ A,TextView B,EditText C,ImageView D,AutoCompleteTextView 13、创建子菜单的方法是___ A,add B,addSubMenu C,createSubMenu D,createMenu 14、MediaPlayer播放资源前,需要调用哪个方法完成准备工作____ A,setDataSource B,prepare C,begin D,pause 15、处理菜单项单击事件的方法不包含____ A, 使用onOptionsItemSelected(MenuItem item)响应

低端android机内存管理优化

大家好,今天我主要来和大家交流下低端android手机内存优化的问题。 一、问题的引出 前天,我在论坛发了一个帖子,想请教大家关于联想A68e内存优化的问题,但是回复者寥寥无几,课件也很少有机油对这方面有较深入的 学习了解。我今天中午,查了有关资料,也用了自己的手机进行了测试,觉得可能对A68e(其实是广大低端Android手机)用户有点帮助,所以特地来分享以下。(说明:本人用的是Sumsumg I9103,我媳妇用的是电信套餐的联想A68e,这几天我没拿到她的手机来测试,所以只能自己的手机进行测试,但是我觉得还是具有一定的参考价值的)。二、ROM和RAM 首先,我先解释一下ROM和RAM的区别。 ROM是Read Only Memory,即只读存储器;RAM是Access Random Memory,即随即读写存储器。 ROM是存储程序和数据的,类别电脑的硬盘,可以存放安装的程序、文件、数据等。而论坛中有开AppEXT2的方法(我没试过),那个只是节省出更多的ROM空间,这样可以使程序运行得更为流畅,但是不能解决“同时运行程序的数量最大值太小”的问题。以A68e为例,如果开一个QQ、音乐播放器,再开个UC浏览器估计机子就崩溃而导致程序退出。 RAM才是程序运行时所占用的物理空间。RAM的价格比ROM贵很多,所以RAM的大小一半程度上决定了机子的价位(另一半就是CPU)。

我的Sumsung是1G RAM,同时开QQ、QQ游戏、QQ音乐、浏览器、微信等七、八个程序也毫无压力。所以RAM太小是影响A68e(包括很多Android手机)用户体验的原因。如果你是个游戏玩家、手机达人,那么这类机子一定不适合你。如果你希望能像有高端机那样的用户体验,我建议你还是多话点银子购买配置高的Android手机。 关于官方宣传256的RAM实际上只有170,那是有一部分被Android系统占用。我的手机1GRAM,实际上也只有724M。 三、Android系统内存管理机制及进程调度机制 下面开始具体的分析了。 首先Android系统是基于Linux 内核开发的开源操作系统,li nux系统的内存管理有其独特的动态存储管理机制。Android采取了一种有别于Linux的进程管理策略,Linux系统在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。 Android系统这样的设计不仅非常适合移动终端(手机、平板)的需要,而且减少了系统崩溃的可能,确保了系统的稳定性。老想着清理内存的同学完全是因为被塞班或者Windows毒害太深,事实上,经常用Taskiller之类的软件关闭后台所有进程,很容易造成系统的不稳定。很多时候出现问题了,只要重启就能解决的原因也在于此。 广大机油一定会发现,关闭了QQ、微信等程序后,其实并没有完全关闭这些程序。这些程序在后台占用了一定的内存,但是并没有运行时

Android减少内存占用专题

Android减少内存占用专题 Android开发经验:不要动不动就分配内存 2011-03-21 开发Andorid应用的开发者都知道,要尽量减少new关键字的使用,因为在手机上GC释放一次内存是一件恐怖的事情,如果你查看一下调试记录,你会发现GC释放内存时有时会花上几百毫秒的时间。可以想象,如果你开发的是游戏,这时你的FPS会下降到多少。 虽然这个原则大家都知道,我们还是会看到一些开发者会出现类似问题,这又是为什么呢?呵呵,其实这是一些隐式的对象创建在作怪,看看以下代码: 原则1:如果可能,请不要使用可变参数 当外部调用时: 系统会自动创建一个临时的数组对象,类似于: 如果该函数经常被调用,则会极大增加GC的压力。所以,如果可能,请不要使用可变参数。 原则2:如果可能,请用StringBuilder代替字符串的相加 我们来看一段代码: 系统会将这句翻译成为如下格式: 这本身没有什么问题,但如果是如下就有意思了: 这段代码等效于:

这样是不是悲剧,本来StringBuilder被无意义的重复创建了多次,期间还在数字转换到文本时创建了String,所以请直接使用显示的StringBuilder来链接字符串。 原则3:尽量将不变的东东设置为常数,特别是字符串 较有效的办法是,你的代码可以这样来写: 当然,即使这样做了,后续对文本操作(如整数到文本转换)仍然是一件费时费力的或,原因是JAVA中,String 是只读的,任何String的内容操作均隐含了new关键字。作者在实际工作中只好采取了更笨笨的办法,自己实现了一个GString类来替代常用的文本操作,其原理时使用预分配的字节内存,只在需要时才转换为String对象。 Android进阶:性能优化篇 2011-05-11 一、图片载入过多出现OutOfMemoryError异常 在使用Gallery控件时,如果载入的图片过多,过大,就很容易出现OutOfMemoryError异常,就是内存溢出。这是因为Android默认分配的内存只有几M,而载入的图片如果是JPG之类的压缩格式,在内存中展开时会占用大量的空间,也就容易内存溢出。这时可以用下面的方法解决: 二、统一管理位图资源,适时释放资源

Android100道选择题

Android 四大组件选择题 选择题 1.下面不是Android四大组件之一的(B ) A. Activity C. Service D. ContentProvider 2. 下面关于广播叙述错误的是(A) A. 广播是Android四大组件之一 B. BroadcastReceiver有两种注册方式,静态注册和动态注册 C. 静态注册需要在中配置 D. 动态注册需要在应用退出时候接触广播的注册。 3. 下面关于BroadcastReceiver错误的是(B): | A. BroadcastReceiver有两种注册方式,静态注册和动态注册。 B. BroadcastReceiver必须在AndroidMainfest文件中声明 C. BroadcastReceiver的使用,一定有一方发送广播,有一方监听注册广播,onReceive方法才会被调用。 D. 广播发送的Intent都是隐式启动。 4. 下面关于谁先接收广播顺序错误的是(B) A. 有序广播,优先级高的先接收 B. 有序广播,同优先级的动静态广播接收器,静态优先于动态。 C. 有序广播,同优先级的动态广播接收器,先注册的大于后注册的。 D. 普通广播时,无视优先级,动态广播接收器优先于静态广播接收器 5. 下面关于广播说法错误的是(B) ' A. 广播分为有序广播和无序广播 B. 使用abortBroadcast方法可以中断所有广播的传递。 C. 广播注册方式分为动态和静态 D. sendOrderBroadcast用来向系统广播有序事件,send Broadcast()是用来广播无序事件。 6.下列关于Intent启动组件说法错误的是(C) ( ) B. startService( ) C. startBroadcastReceiver() () 7.对于广播的发送,Intent的启动方式是(B ) A.显式启动 B. 隐式启动 C. A和B都可以 D. 以上说法都不正确。 8. 下面关于Notification的说法正确的是(D ): A. NotificationManager man = new NotificationManager(); ! B. PendingIntent contentIntent= new PendingIntent(); C. RemoteViews contentView = new RemoteViews(); D. Notification notification = new Notification(); 9. 关于ContenValues类说法正确的是( A ) A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是String类型,而值都是基本类型 B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是任意类型,而值都是基本类型 C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名,可以为空,而值都是String类型 |

相关文档
最新文档