activity

[Android]App 内存泄漏检查工具MAT

北战南征 提交于 2019-12-01 05:13:12
Android App发生内存泄漏,常见的有Bitmap 使用后沒有recycle(),Drawable 使用后沒有setCallback(null)等。 Eclipse 有个插件工具MAT(Memory Analyzer Tool)可以帮助定位内存泄漏的对象。 安装MAT Update site: http://archive.eclipse.org/mat/1.1/update-site/ 用DDMS工具Dump出问题App的.hprof文件 比如com.world.test2.hprof Dump之前最好先运行一下GC "Cause GC" , 确保dump出来的是还不能回收的对象等。 用SDK tools下工具hprof-conv.exe 做转换 hprof-conv com.world.test2.hprof appleak.hprof 用Eclipse “Open Head Dump”打开新转换的.hprof 文件--appleak.hprof 查看图形化界面,一个一个检查怀疑的点。 总结: MAT tool不会直接告诉你哪里内存泄漏,但是会列出怀疑的对象,需要你仔细检查这些对象为什么没有被释放掉。 下面是测试code, 在Android 4.2.2上测试过。 此种情况可以引起Activity无法回收的情况,因为直接用类似private static Activity

Handler导致内存泄露分析

青春壹個敷衍的年華 提交于 2019-12-01 04:10:40
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // do something. } } ``` 当我们这样创建`Handler`的时候`Android Lint`会提示我们这样一个`warning: In Android, Handler classes should be static or leaks might occur.`。 一直以来没有仔细的去分析泄露的原因,先把主要原因列一下: - `Android`程序第一次创建的时候,默认会创建一个`Looper`对象,`Looper`去处理`Message Queue`中的每个`Message`,主线程的`Looper`存在整个应用程序的生命周期. - `Hanlder`在主线程创建时会关联到`Looper`的`Message Queue`,`Message`添加到消息队列中的时候`Message(排队的Message)`会持有当前`Handler`引用,当`Looper`处理到当前消息的时候,会调用`Handler#handleMessage(Message)`.就是说在`Looper`处理这个`Message`之前,会有一条链`MessageQueue -> Message -> Handler ->

一道腾讯面试官指点:组件之间的跳转和组件通信原理机制

久未见 提交于 2019-12-01 02:19:50
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 说下组件之间的跳转和组件通信原理机制 心理分析:面试官从架构层次 了解求职者是否对组件化有深入研究。是否使用过组件化,使用有多深。通过该问题一目了然。如果能说出项目的演进 组件通信选型 绝对是一个加分项 求职者:应该从为什么会用到组件化 和组件定义,组件通信的演进说起 我们公司的一个单体项目进行组件化架构改造,我们最开始从以下7个方面入手: 代码解耦。如何将一个庞大的工程分成有机的整体? 组件单独运行。因为每个组件都是高度内聚的,是一个完整的整体,如何让其单独运行和调试? 组件间通信。由于每个组件具体实现细节都互相不了解,但每个组件都需要给其他调用方提供服务,那么主项目与组件、组件与组件之间如何通信就变成关键? UI 跳转。UI 跳转指的是特殊的数据传递,跟组件间通信区别有什么不同? 组件生命周期。这里的生命周期指的是组件在应用中存在的时间,组件是否可以做到按需、动态使用、因此就会涉及到组件加载、卸载等管理问题。 集成调试。在开发阶段如何做到按需编译组件?一次调试中可能有一两个组件参与集成,这样编译时间就会大大降低,提高开发效率。 代码隔离。组件之间的交互如果还是直接引用的话,那么组件之间根本没有做到解耦,如何从根本上避免组件之间的直接引用,也就是如何从根本上杜绝耦合的产生?

显式intent和隐式intent

爷,独闯天下 提交于 2019-12-01 01:14:39
android当中显式intent和隐式intent的区别   定义:   Intent定义:Intent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。   显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。   隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。 显示Intent直接指明了被启动的的类的定义  比如一个实例:  Mainactivity.java package com.example.root.longpra; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected

Android之Activity的几种跳转方式

此生再无相见时 提交于 2019-12-01 01:14:25
1.显示调用方法 Intent intent=new Intent(this,OtherActivity.class); //方法1 Intent intent2=new Intent(); intent2.setClass(this, OtherActivity.class);//方法2 intent2.setClassName(this, "com.zy.MutiActivity.OtherActivity"); //方法3 此方式可用于打开其它的应用 intent2.setComponent(new ComponentName(this, OtherActivity.class)); //方法4 startActivity(intent2); 2.隐式调用方法(只要action、category、data和要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK 3.跳转到另一个Activity后,当返回时能返回数据 在跳转的Activity端,调用startActivityForResult(intent2, 1),跳转到下一个Activity,其中第一个参数为传入的意图对象,第二个为设置的请求码; 跳转到第二个Activity后,调用setResult(100, intent)方法可返回上一个Activity,其中第一个参数为结果码

eclipse中svn的默认账户删除

对着背影说爱祢 提交于 2019-11-30 22:09:16
http://blog.163.com/dengxianchuan@yeah/blog/static/1094590962011111352441517/ 如果找不到该目录: 搜索: Subverion 文件夹 关于swipeback从右侧切入的效果: http://www.kankanews.com/ICkengine/archives/108432.shtml 0 首先要在res/anim中写两个在启动activity时用到的动画 启动activity时被启动的activity执行的动画 in_from_right.xml (从左侧滑入) <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="256" android:fromXDelta="100%" android:toXDelta="0%" /> </set> 启动activity时当前activity执行的动画 keep.xml (保持不变) <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com

webpack权限控制

会有一股神秘感。 提交于 2019-11-30 18:31:12
const type= "a"; const menusConfig = { a: ["activity"], b: ["activity", "theme", "chessGame"], //mutiIdentity "c": ["activity"], d: ["activity", "theme"], f: ["activity"], g: ["activity"] }; const menus = (() => { let o = {}; let menu = menusConfig[type]; menu.forEach(item => { o[item] = true; }); return o; })(); module.exports = { menus: menus }; 来源: https://www.cnblogs.com/dhsz/p/11634907.html

android中程序的退出和关闭

爱⌒轻易说出口 提交于 2019-11-30 17:00:37
在工程中,直接调用 System.exit(0) 函数就可以实现对工程的关闭。也可以使用退出对话框提醒的方式进行退出,代码如示: public boolean onKeyDown( int keyCode, KeyEvent event) { if (keyCode == KeyEvent. KEYCODE_BACK && event.getRepeatCount() == 0) { // 确认对话框 final AlertDialog isExit = new AlertDialog.Builder( this ).create(); isExit.setMessage( " 你确定要退出? " ); DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case AlertDialog. BUTTON1 : // " 确认 " 按钮退出程序 NotificationManager notificationManager = (NotificationManager) ModeChooseActivity. this

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

假如想象 提交于 2019-11-30 15:21:10
如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态 当一个Activity被pause或者stop的时候,这个Activity的对象实际上还是保存在内存中,因此这个Activity中的信息(成员和状态信息)还可以重新获取到. 如果系统为了整理内存而销毁了整合各Activity对象时,系统没法简单的原封不动地恢复先前的Activity对象及其状态信息. 从android手册上来看,Activity中提供了一个方法:onSavedInstanceState(Bundle obj).当系统销毁一个Activity时,会将Activity的状态信息已键值对形式存放在bundle对象中. 第一次启动Activity时,这个bundle对象是空的,null.如果Activity被系统销毁了,然后用户要回退回去看的话,系统会调用这个Activity的onCreate方法,并把bundle对象传递过去. 这个函数有默认的行为,因此就算你不覆盖它,它在Activity中也有实现. 这回我总算明白了为什么onCreate方法的定义是"protected void onCreate (Bundle savedInstanceState)"这个样子的了. 另外,刚才查看了一下Activity的源码,发现Activity还有个onRestoreInstanceState

fragment概念理解

依然范特西╮ 提交于 2019-11-30 13:17:57
fragment概念理解知识,fragment概念理解图片 fragment概念理解 内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb 3.0新增的概念,你可以将Fragment类比为Activity的一部分,它拥有自己的生命周期,接收自己的输入,你可以在Activity运行的时加入或者移除Fragment.(或者我们也可以将Fragment类比为一个可以在不同的Activity中重用的子Activity。 Fragment总是嵌入在Activity中,同时Fragment的生命周期受Activity影响,当Activity 暂停,所有在这个Activity中的Fragments将被释放。然而当一个Activity在运行比如resume时,你可以单独的操控每个Fragment。 某种意义上Fragment是屏幕中的一个子activity,但是在一个屏幕显示多个activity会造成概念和逻辑的混乱,所以引入fragment的概念,可以理解为屏幕中的一块UI,可作为activity的一部分。Fragment是view的容器,加载layout,处理一小部分屏幕,它是activity的一部分。Fragment提供的UI和代码的重用,例如,在大屏幕设备中,显示左右两个fragment或者上下两个fragment(具体看