搜档网
当前位置:搜档网 › android-如何让AlertDialog 在点击确定或者取消时不消失

android-如何让AlertDialog 在点击确定或者取消时不消失

android-如何让AlertDialog 在点击确定或者取消时不消失
android-如何让AlertDialog 在点击确定或者取消时不消失

这种方法需要用点技巧。由于系统通过调用dismiss来关闭对话框,那么我们可以在dismiss方法上做点文章。在系统调用dismiss方法时会首先判断对话框是否已经关闭,如果对话框已经关闭了,就会退出dismiss方法而不再继续关闭对话框了。因此,我们可以欺骗一下系统,当调用dismiss方法时我们可以让系统以为对话框已经关闭(虽然对话框还没有关闭),这样dismiss方法就失效了,这样即使系统调用了dismiss方法也无法关闭对话框了。

下面让我们回到AlertDialog的源代码中,再继续跟踪到AlertDialog的父类Dialog的源代码中。找到dismissDialog方法。实际上,dismiss方法是通过dismissDialog方法来关闭对话框的,dismissDialog方法的代码如下:

private void dismissDialog() {

if (mDecor == null ) {

if (Config.LOGV) Log.v(LOG_TAG,

" [Dialog] dismiss: already dismissed, ignore " );

return ;

}

if ( ! mShowing) {

if (Config.LOGV) Log.v(LOG_TAG,

" [Dialog] dismiss: not showing, ignore " );

return ;

}

mW indowManager.removeView(mDecor);

mDecor = null ;

mW indow.closeAllPanels();

onStop();

mShowing = false ;

sendDismissMessage();

}

该方法后面的代码不用管它,先看if(!mShowing){ … } 这段代码。这个mShowing 变量就是判断对话框是否已关闭的。因此,我们在代码中通过设置这个变量就可以使系统认为对话框已经关闭,就不再继续关闭对话框了。由于mShowing 也是private 变量,因此,也需要反射技术来设置这个变量。我们可以在对话框按钮的单击事件中设置mShowing ,代码如下:

try

{

Field field = dialog.getClass()

.getSuperclass().getDeclaredField(

"mShowing" );

field.setAccessible( true );

// 将mShowing变量设为false,表示对话框已关闭

field.set(dialog, false );

dialog.dismiss();

}

catch (Exception e)

{

}

将上面的代码加到哪个按钮的单击事件代码中,哪个按钮就再也无法关闭对话框了。如果要关闭对话框,只需再将mShowing 设为true 即可。要注意的是,在一个按钮里设置了mShowing 变量,也会影响另一个按钮的关闭对话框功能,因此,需要在每一个按钮的单击事件里都设置mShowing 变量的值。

android避免内存泄露

1、数据库的cursor没有关闭 2、构造adapter没有使用缓存contentview 衍生的listview优化问题:减少创建View的对象,充分使用contentview,可以使用静态类来处理优化getView的过程 3、Bitmap对象不使用时采用recycle()释放内存 4、Activity中的对象生命周期大于Activity 调式方法:DDMS->HEAPSIZE->adtaobject->total size Android应用程序被限制在16MB的堆上运行,至少在T-Mobile G1上是这样。对于手机来说,这是很大的内存了;但对于一些开发人员来说,这算是较小的了。即使你不打算使用掉所有的内存,但是,你也应该尽可能少地使用内存,来确保其它应用程序得以运行。Android在内存中保留更多的应用程序,对于用户来说,程序间切换就能更快。作为我(英文作者)工作的一部分,我调查了Android应用程序的内存泄露问题,并发现这些内存泄露大多数都是由于相同的错误导致的,即:对Context拥有较长时间的引用。 在Android上,Context常用于许多操作,更多的时候是加载和访问资源。这就是为什么所有的Widget在它们的构造函数里接受一个Context的参数。在一个正常的Android应用程序里,你会看到两种Context类型,Activity和Application。而一般在需要一个Context的类和方法里,往往传入的是第一种: Java代码 @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad");

Android简单的登陆界面的设计开发

通信实训报告 -Android移动平台开发 学院:信息工程学院 班级: 学号: 姓名:

实训内容: 一.1.Andriod的简介 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread 和Android 3.0 Honeycomb。 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:魅族(M9),华为、中兴、联想、蓝魔等。 2.Android构架图 二.1软件下载 Android SDK,网址是https://www.sodocs.net/doc/b712814544.html,. JDK的下载地址https://www.sodocs.net/doc/b712814544.html,/javase/downloads/widget/jdk6.jsp。Eclipse的下载网址是https://www.sodocs.net/doc/b712814544.html,/downloads/ 2.Android开发环境搭建

Android开发规范参考文档

Android开发参考文档 一、Android编码规范 1. java代码中不出现中文,最多注释中可以出现中文.xml代码中注释 2. 成员变量,局部变量、静态成员变量命名、常量(宏)命名 1). 成员变量: activity中的成员变量以m开头,后面的单词首字母大写(如Button mBackButton; String mName);实体类和自定义View的成员变量可以不以m开头(如ImageView imageView,String name), 2). 局部变量命名:只能包含字母,组合变量单词首字母出第一个外,都为大写,其他字母都为小写 3). 常量(宏)命名: 只能包含字母和_,字母全部大写,单词之间用_隔开UMENG_APP_KEY 3. Application命名 项目名称+App,如SlimApp,里面可以存放全局变量,但是杜绝存放过大的实体对象4. activity和其中的view变量命名 activity命名模式为:逻辑名称+Activity view命名模式为:逻辑名称+View 建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view 5. layout及其id命名规则 layout命名模式:activity_逻辑名称,或者把对应的activity的名字用“_”把单词分开。

命名模式为:view缩写_模块名称_view的逻辑名称, 用单词首字母进行缩写 view的缩写详情如下 LayoutView:lv RelativeView:rv TextView:tv ImageView:iv ImageButton:ib Button:btn 6. strings.xml中的 1). id命名模式: activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称,strings.xml中,使用activity名称注释,将文件内容区分开来 2). strings.xml中使用%1$s实现字符串的通配,合起来写 7. drawable中的图片命名 命名模式:activity名称_逻辑名称/common_逻辑名称/ic_逻辑名称 (逻辑名称: 这是一个什么样的图片,展示功能是什么) 8. styles.xml 将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中; 9. 使用layer-list和selector,主要是View onCclick onTouch等事件界面反映

Android登录界面(步骤详细)

Android简单登录界面 设计一个登陆界面: 允许用户输入用户名,密码; 用户点击“Login”之后,如果用户名为admin, 密码为123则显示“登陆成功”;如果用户名密码其中之一不正确,红色字体显示“登陆失败!” 首先我们来建立一个新的项目:

图标那一步就随便选吧,下一步: 这一步与上次有点不同,这次我们不要ADT 帮我们创建任何的Activity,我们只需要一个空的项目。 点击Finish后,我们会发现,项目文件视图下,与上次的不一样,src, res/layout 是空的,这次需要我们自己去添加了。 首先来明确一下我们现在的目标: 建立一个包含登录框的界面,并将它显示在我们的手机(模拟器)上。 建立一个界面的主要步骤是什么呢?主要有以下几步: ?在res/layout下创建布局文件; ?在src下创建Activity子类,并将布局文件与这个Activity联系起来。 ?在AndroidManifest.xml程序配置文件中,添加Activity的声明。 我们先来 1. 创建布局文件: 在Eclipse项目文件中选中layout 文件夹,在工具栏里点击下面图标 在弹出的窗口,填上这个xml布局文件的文件名,Root Element 根节点就选择Linearlayout 即可

点击下一步,这一步是选择更多配置属性的,暂且不用理会,直接点击Finish。 我们发现,在res/layout 下面多了一个login.xml文件,同时Android 的Layout 编辑器也把它打开了。 切换到“source”代码视图,今天我们不用“所见即所得”的傻瓜拖拽方式。 我们看到xml代码是这样的: 根节点是LinearLayout,即线性布局,所谓线性布局,有点像J2SE上的流式布局,就是其中的UI元素,会按水平或者垂直方向顺序地铺开。 LinearLayout有个xml属性:android:orientation,它有两个可选值:vertical和horizontal,指明该线性布局中的元素,是以垂直(vertical)还是水平(horizontal)方向排列。

Android开发内存泄漏及检查工具使用培训资料

Android 开发内存泄漏及检查工具使用培 训资料

目录 1内存泄露 (3) 1.1 内存泄露的概念 (3) 1.2 开发人员注意事项 (4) 1.3 Android(java)中常见的引起内存泄露的代码示例 (4) 1.3.1查询数据库没有关闭游标 (6) 1.3.2 构造Adapter时,没有使用缓存的convertView (6) 1.3.3 Bitmap对象不在使用时调用recycle()释放内存 (7) 1.3.4 释放对象的引用 (8) 1.3.5 其他 (9) 2内存泄露的分析工具 (9) 2.1 内存监测工具DDMS --> Heap (9) 2.2 内存分析工具MAT (Memory Analyzer Tool) (10) 2.2.1 生成.hprof文件 (10) 2.2.2 使用MA T导入.hprof文件 (11) 2.2.3 使用MA T的视图工具分析内存 (12)

1内存泄露 Android 应用程序开发以Java语言为主,而Java编程中一个非常重要但却经常被忽视的问题就是内存使用的问题。Java的垃圾回收机制(Garbage Collection 以下简称GC)使得很多开发者并不关心内存使用的生命周期,只顾着申请内存,却不手动释放废弃的内存,而造成内存泄露,引起很多问题,甚至程序崩溃。Android的虚拟机Dalvik VM和java虚拟机JVM没有什么太大的区别,只是在字节码上稍做优化,所以Android应用开发中同样会出现内存泄露的问题。而且由于Android智能平台主要用于嵌入式产品开发,可用的内存资源更加稀少,所以对于我们Android应用开发人员来说,就更该了解Android程序的内存管理机制,避免内存泄露的发生。 1.1 内存泄露的概念 在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,calloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。 这里我们只简单的理解,在java程序中,如果已经不再使用一个对象,但是仍然有引用指向它,GC就无法收回它,当然该对象占用的内存就无法再被使用,这就造成内存泄露。可能一个实例对象的内存泄露很小,并不会引起很大的问题。但是如果程序反复做此操作或者长期运行,造成内存不断泄露,终究会使程序无内存可用,只好被系统kill掉。在以下情况,内存泄漏导致较严重的后果: * 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理); * 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时; * 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候; * 泄漏在操作系统内部发生; * 泄漏在系统关键驱动中发生; * 内存非常有限,比如在嵌入式系统或便携设备中; * 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。

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.sodocs.net/doc/b712814544.html,/mat/downloads.php B.下载MAT Eclipse插件安装包(红框所示,当然你也可是选择Update Site在线安装,个人觉得比较慢)

Android界面设计教程

这样的话就比较容易实现了,再看一下整体的Layout布局情况: xml布局文件如下:注意层次的嵌套。先是一个RelativeLayout,它有两个子布局,RelativeLayout和LinearLayout。

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:padding="10.0dip" android:singleLine="true" android:text="设置" android:textColor="@color/white" android:textSize="15dp" />

android内存管理-MAT与防范手段

内存管理与防范手段 目录 内存管理与防范手段 (1) 一.内存分配跟踪工具DDMS–>Allocation tracker 使用 (2) 二.内存监测工具DDMS-->Heap (2) 三.内存分析工具MAT(MemoryAnalyzerTool) (3) 1.生成.hprof文件 (4) 2.使用MAT导入.hprof文件 (5) 3.使用MAT的视图工具分析内存 (5) 四.MAT使用实例 (5) 1.生成heap dump (7) 2.用MAT分析heap dumps (9) 3.使用MAT比较heap dumps (11) 五.防范不良代码 (11) 1.查询数据库没有关闭游标 (11) 2.缓存convertView (12) 3.Bitmap对象释放内存 (13) 4.释放对象的引用 (13) 5.Context的使用 (14) 6.线程 (17) 7.其他 (20) 六.优化代码 (20) 1.使用自身方法(Use Native Methods) (20) 2.使用虚拟优于使用接口 (20) 3.使用静态优于使用虚拟 (20) 4.尽可能避免使用内在的Get、Set方法 (20) 5.缓冲属性调用Cache Field Lookups (21) 6.声明Final常量 (21) 7.慎重使用增强型For循环语句 (22) 8.避免列举类型Avoid Enums (23) 9.通过内联类使用包空间 (23) 10.避免浮点类型的使用 (24) 11.一些标准操作的时间比较 (24) 12.为响应灵敏性设计 (25)

一.内存分配跟踪工具DDMS–>Allocation tracker 使用 运行DDMS,只需简单的选择应用进程并单击Allocation tracker标签,就会打开一个新的窗口,单击“Start Tracing”按钮;然后,让应用运行你想分析的代码。运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出现第一个表格中。单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。通过allocation tracker,不仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。 尽管在性能关键的代码路径上移除所有的内存分配操作不是必须的,甚至有时候是不可能的,但allocation tracker可以帮你识别代码中的一些重要问题。举例来说,许多应用中发现的一个普遍错误:每次进行绘制都创建一个新的Paint对象。将Paint的创建移到一个实例区域里,是一个能极大提高程序性能的简单举措。 二.内存监测工具DDMS-->Heap 无论怎么小心,想完全避免badcode是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。Androidtools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使eclipse的ADT插件,并以真机为例,在模拟器中的情况类似)。用Heap 监测应用进程使用内存情况的步骤如下: 1.启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的; 2.将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“MassStorage”; 3.链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息; 4.点击选中想要监测的进程,比如system_process进程; 5.点击选中Devices视图界面中最上方一排图标中的“UpdateHeap”图标; 6.点击Heap视图中的“CauseGC”按钮; 7.此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况 a)点击“CauseGC”按钮相当于向虚拟机请求了一次gc操作;

基于Android系统的App界面设计

基于Android系统的App界面设计 智能手机时代的来临改变了大多数人的生活习惯,时至今日智能手机已经成为了人们工作生活中的一部分,在工作生活中发挥着重要的作用。App作为智能手机应用程序的核心,构建以用户体验为核心的页面设计是智能手机App设计的核心与要点,同时也是满足用户使用需求的重要途径与方式。现今的智能手机App主要分为IOS与Android两大市场,与IOS的封闭不同的是Android系统具有极强的开放性,而这一开放性在为Android系统App带来无限可能的同时也使得基于Android系统所开发的App界面本身缺乏统一的规范,从而造成基于Android系统所开发的App界面具有极大的开放性。新时期为做好基于Android 系统App的设计需要从情感、认知以及感官三个层面入手做好基于Android系统的App界面的开发设计,使之具有良好的用户使用体验。 标签:Android系统;App;界面设计 Abstract:The advent of the smart phone era has changed the habits of most people. Today,smart phone s have become a part of people’s work and life,and play an important role in the work and life. As the core of smart phone applications,App plays an important role in the work and life. The design of page based on user experience is the core and key point of the App design of smart phone,and it is also an important way and way to meet the needs of users. Today’s smartphone App is mainly divided into IOS and Android two major markets,Different from the closure of IOS,Android system has a very strong openness,and this openness not only brings infinite possibility to App of Android system,but also makes the App interface based on Android system lack of unified specification. As a result,the App interface based on Android system is very open. In order to do well the design of App based on Android system in the new period,it is necessary to develop and design the App interface based on Android system from the three aspects of emotion,cognition and sense organ,to make it have a good user experience. Keywords:Android system;App;interface design 前言 Android系统是与IOS系统所并行的应用于智能手机中的两大智能系统,在基于Android系统App界面开发的过程中受多种因素的影响使得一些App的界面具有很大的不协调性,从而影响了广大用户的使用体验。本文在分析影响智能手机App界面设计因素的基础上对如何做好基于Android系统的App界面设计进行分析阐述。 1 影响智能手机App界面设计的因素分析 智能手机App是智能手机的灵魂,用户结合自身需求可以下载安装自身所

基于android的简单用户注册系统课程设计报告

实验报告 课程名称 : Android应用程序设计 实验名称 :简单的用户注册登录系统 学院 : 电子信息工程学院 专业 : 计算机科学与技术 班级 : 姓名 : 学号 : 时间 : 目录 第一章设计背景 1.1引言 (3) 1.2设计目的 (3) 1.3 设计要求 (3) 1.4 开发运行环境 (3) 第二章需求分析 2.1技术可行性 (4) 2.2网络需求分析 (4) 2.3运行环境需求分析 (4) 2.4用户需求分析 (4) 第三章具体方案设计 3.1 注册登录界面系统介绍 (5) 3.2 流程图 (5) (6) 3.3详细界面设计 3.3.1 注册界

面........................................................... . (6) 3.3.2 登录界面............................................................ (7) 3.4 项目目录结构图.......................................................... (8) 3.5 系统界面组件的生成...................................................... (8) 3.6 实现过程及代码 3.6.1 注册界面的生成....................................................... .. (9) 3.6.2 登录界面的生成.................................................... . (10) 3.6.3 用XML实现用户界面优缺点................................................. 12 3.7 程序代码 3.7.1 Zhuce.java (12) 3.7.2 denglu.java (14) 第四章实验结果截图 4.1 填写注册信息................................................................. 16 4.2 注册成功..................................................................... 16 4.3 填写登录信息................................................................. 17 4.4 登录成功..................................................................... 18 4.5 填写密码不一致时............................................................. 19 第五章软件的系统测试 5.1 系统测试的原则.............................................................. 20 5.2 测试环境..................................................................... 20 第六章实验总结 一、设计背景 1.1 引言 用户注册登录程序在网上经常可见。一般都是在Web主页上提供一个用户名及密码文本框,通过收集用户输入的信息,与数据库中的记录进行判断,若正确则进入相关页面;若不正确或没有该记录,则提示出错信息。现在很多的网站的浏览都需要注册成为会员才可以使用更多的功能,所以需要我们自己注册成为网站会员方可使用更多功能。类似微博、百度、人人等。 如果要完成用户登录,则一定要有一个表单页面,此页面可以输入登录用户名和密码。但是在登录之前也必须有过注册方可进行登录,因此也需要有一个注册页面来完成

Android App内存泄露测试方法总结

Android App内存泄露测试方法总结 1、内存泄露 Android系统为每一个运行的程序都指定了一个最大运行内存,超过这个值则会触发OOM机制,反应在界面就是闪退、Crash现象,导致OOM发生的原因比如内存泄露或者是代码不考虑后果使用大量的资源,都有可能导致OOM出现的。OOM的临界值可以通过adb shell getprop | findstr “heap”查看到: 2、Android的GC机制 Android GC机制沿用了java的GC机制,当需要新内存去分配对象的时候而剩余不够的时候,会触发GC,把无用的对象回收掉,其中一个重要的算法便是分代式算法,这个算法把虚拟机分为年轻代、老年代和持久代,对象先分配到年轻代,然后GC多次后还存活的将会移动到老年代,老年代就不会频繁触发GC机制,一般触发频繁的都是年轻代的对象。 3、为什么会内存泄露 上面我们知道了GC机制,那么如果GC过后程序还是没有内存,那么会发生OOM,导致GC后还是没有足够内存分配新对象的主要原因就是内存泄露了。首先要知道内存泄露也就是GC不掉的根源是生命周期长的对象持有生命周期短的对象,导致无用的对象一直无法回收。以下是几个典型的分类: 1)**静态类相关的泄露:**static对象的生命周期伴随着整个程序的生命周期,所以这块要注意不要把一些对象引用添加到static对象里面去,会造成与之关联的对象无法回收。

2)各种资源的释放:包括cursor的关闭,IO流的关闭,bitmap的回收等,进行一些带有缓存的资源一定要关闭或者释放。 3)Handler的泄露:调用handler的delay的时候,会被认为对象是有用的,导致无法回收,还有handler开启线程去下载东西没有下载完成的时候,也会因为线程导致无法回收activity;或者使用handlerThread的时候,有延迟的方法,都会导致无法回收。其主要原因在于handler是持有activity的引用,主线程不是自带一个Looper然后给handler用,导致有关联关系。 4)各种注册引用方法:比如一个常驻的后台线程处理某些时间,把当前对象注册,因为一直持有对象引用,导致这个activity一直保留,所以不用的时候需要反注册。 5)把对象缓存进容器内却忘记remove掉:有时候为了加快页面响应,结果缓存一些对象到容器内,结果越加越多,然后挂掉。 4、系统级别的内存管理 1)LMK机制和oom_adj的值 Android内核有个专用的驱动low-memory-kill,当系统级别的内存不够的时候会根据oom_adj的值以及内存分配状况去kill掉某个进程,oom_adj可以在 /proc/[pid]/oom_adj看到,并且这个值会随着进程的状态改变而改变,比如系统进程一般是-16,越大越容易被干掉。 2)5个进程的优先级 前台进程:当前运行的,基本不死; 可见进程:界面可以见到,比如被遮挡; 服务进程:进程带后台服务的,比如播放器; 后台进程:点击home键,但不退出,就是后台进程了,有比较大几率会被杀;

Android程序用户界面的设计与开发

Android程序用户界面的设计与开发 摘要 安卓智能凭借其优越性和易操作性,越来越大众化。然而,为了脱离庸俗化和单一化,安卓程序用户界面的美观设计越来越显重要。可以说,谁设计出引人注目的安卓程序用户界面,设计出具有极强的用户个人主义色彩魅力的界面,谁就占领市场。 关键词:安卓,界面,设计 一 .现况 目前,智能手机已经成为人们生活的必备工具,随着手机4G时代的到来,智能手机将会与我们的生活结合的更加紧密,得到更广泛的应用,因此围绕智能手机的相关应用产品的研发也将得到了快速的发展。特别是安卓系统的开发。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。 因此,安卓手机相关应用产品界面设计的优劣,是目标用户是否使用该手机以及相关应用软件的重要环节,所以近来围绕安卓手机用户体验设计的研究越来越多,智能手机交互界面动效设计研究就是其中的一项。安卓手机界面设计的动效,是界面从一个静止界面转换成另外一个静止界面之间的动态的转场效果,通过这样的动态转场效果是可以增进使用者对于某款手机或者某个软件以及游戏与娱乐项目的兴趣,起到促进手机、手机应用软件和游戏娱乐项目的销售,赢得客户青睐和信任的

作用。原先,安卓手机的界面只有简单的链接,是因为“动效”对手机硬件的运算速度要求较高。然而,随着4G智能手机的普及,手机的硬件运算速度大幅提升,内、外存储器的容量加大,致使手机动效的实现成为可能。 现在,有关安卓程序用户界面的开发的设计师还在少数,特备是专业的前端UI设计大师更是寥寥无几。毕竟动效设计具有一定的艺术性和技术性的难度。而如若掌握一定的安卓网页美工的知识并将之投入工作中,在目前市场上是极具优越性的。 现在介绍下如何运用Bootstrap来快速设计出简约美观的安卓程序界面。 二.Bootstrap的应用 2.1.Bootstrap的介绍 Bootstrap是Twitter的设计师Mark Otto和Jacob Thornton合作开发,是目前很受欢迎的前端框架。它是基于HTML、CSS、JAVASCRIPT 的,简洁灵活,使得 Web 开发更加快捷。它是一个CSS/HTML框架。 下面是基于bootstrap的ace一组控件的封装框架的截图: 而安卓版本的bootstrap样式库的显示效果如下:

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移动智能开发技术-界面登录设计实验

临沂大学信息学院 学生上机(实验)报告 课程名称:Android移动智能开发技术 指导教师: 学生姓名: 学号: 一、实验名称 界面登录设计实验 二、实验内容(具体的程序)

1、建两个ACTIVITY,实现从界面一跳转到界面二。 2、在主界面添加按钮等控件。 3、在MainActivity里写代码

package com.example.and; import android.os.Bundle; import android.app.Activity; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import https://www.sodocs.net/doc/b712814544.html,poundButton; import https://www.sodocs.net/doc/b712814544.html,poundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { Button btn; OnClickListener lis; EditText etname; EditText etpwd; CheckBox ch1; CheckBox ch2; SharedPreferences sf ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.sodocs.net/doc/b712814544.html,yout.activity_main); btn =(Button) findViewById(R.id.btnlogin); etname = (EditText)findViewById(R.id.etname); etpwd = (EditText)findViewById(R.id.etpwd); ch1 = (CheckBox)findViewById(R.id.checkBox1); ch2 = (CheckBox)findViewById(R.id.checkBox2); sf = getSharedPreferences("my",Activity.MODE_PRIVA TE); if(sf.getBoolean("ch1", false)==true)

android笔试题及答案

单选题 中可以用来处理js中警示,确认等对话框的是(C) 2.假设assets目录下有文件结构html/,用loadUrl()方法将该网页加载至 webView 时,需传入的参数是(B) A. B. C. D. 3.下列不属于补间动画相关类的是(B) 中网络互连中需要获取状态码,根据状态码来判断请求是否已经完成,下列状 态码表示请求完成的是(D) 5.关于ImageSwitcher 说法错误的是:( B ) 里可以通过Alpha设定转换时候的透明位 B.在使用一个ImageSwitcher之前,不一定要调用setFactory方法 是设置资源被读入到这个ImageSwitcher的时候动画效果 是资源文件从这个ImageSwitcher里消失的时候要实现的动画效果 6.建立蓝牙连接时通过_D_方法来获取BluetoothAdapter对象 D. () 7.关于Handler的说法不正确的是( A ) A.它实现不同进程间通信的一种机制 B.它避免了在新线程中刷新UI的操作 C.它采用队列的方式来存储Message D.它实现不同线程间通信的一种机制 8.Vector和ArrayList的主要区别是(B): A. ArrayList内部基于链表,而Vector是基于数组的

B. Vector的大部分方法做了同步,而ArrayList没有同步 C. Vector是可串行化的,而ArrayList不是 D. Vector实现了RandomAccess,而ArrayList没有 9.下列属于SAX解析xml文件的优点的是(B ) A.将整个文档输在内存中,便于操作,支持删除,修改,重新排列等多种功能 B.不用事先调入整个文档,占用资源少 C.整个文档调入内存,浪费时间和空间 D.不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失 a1="abc"; String a2="abc"; String a3="abcd"; 总共创建( A )个String对象。 多选题 1.在添加第一个appwidget窗口小部件时,会执行的方法是(ABD) 2.下列属于SOAP优点的是(ABCD) A,SOAP 与编程语言无关。SOAP 可以使用任何语言来完成 B,SOAP 是完全和厂商无关。 C,SOAP 与平台无关D,SOAP 是简单的,可扩展的 3.下列属于SAX解析XML需要用到的类和接口是(BCD) A.DocumentBuilder 4.在使用蓝牙必须获取的权限是(AD) 5.Chronometer类的重要方法(ABC) 简答题 1.oom是什么如何避免 当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后这就会抛出OutOfMemoryException 也就是OOM 避免:

相关主题