手机发烫并且显示androiod手机系统遇到问题题

找好工作,快人一步查看: 44430|回复: 2
手机为什么会发烫?怎么解决?
该用户从未签到
本帖最后由 痞子那厮高 于
16:38 编辑
炎炎夏日,天气越来越热。手机玩了一会再放到口袋里,感觉就像是装了一个暖手宝,热得不行。那么是什么导致了手机发热呢?又有什么好的方法能够避免手机发热?我们今天就来说说手机发热的问题。
r3.jpg (45.43 KB, 下载次数: 1)
10:44 上传
根据国际安全标准,手持式装置的表面温度最高不应超过48℃,倘若过热就可能会有烫伤、电池损害等安全问题。但根据网友测试,使用高性能处理器的智能手机,表面温度是有可能超过50℃以上的。
手机发热发烫的原因除了天气和环境因素,手机发热的主要原因有以下6个,看看你的使用习惯有没有中枪的:1. 运行高耗能的App如玩3D游戏、播放影片、大量资料传输等,造成CPU持续以高负载运行。
r4.jpg (38.76 KB, 下载次数: 1)
10:44 上传
2. 边充电边玩游戏或通话手机电池一边输入、一边输出,这不仅会损耗双倍电力,还可能对电池性能造成伤害,最好避免这种行为。3. 使用不良的锂电池或品质不佳的山寨机对iPhone用户来说不是问题,只要你买的不是可以换电池还能双卡双待七彩跑马灯的iPhone…
r5.jpg (33.54 KB, 下载次数: 1)
10:44 上传
4. 手机App故障有时候有些App的异常运行,会大量占用内存,使CPU高负载运行。5. 保护壳和其他覆盖物配有某些保护壳的可能会影响手机散热,导致手机发烫。6. root安装不兼容插件root后安装些随机启动并长驻后台的插件或者不兼容的插件可能会引起手机发热发烫的情况。
手机发热发烫的危害
r1.jpg (48.09 KB, 下载次数: 1)
10:44 上传
手机发热不仅可能使你觉得烫得拿不住,甚至有人因为用手机通话半小时,紧贴手机的左脸颊发生烫伤,擦药三四天才好…还会对电池造成损害,并诱发其他危险因素,造成附加危害。
根据理论,锂电池温度每升高10℃,化学反应速度将提升两倍,将会造成电池耗电加速,这就是为什么夏天耗电更快的可能原因。
若温度太高超过45℃,就会破坏锂电池内的化学平衡,导致锂电池中的不利副反应与产物被激化出更多热反应,触发更多危险情况发生。
现在使用的锂聚合物电池虽然有弹性的包装吸收热膨胀的能量,可是随着聚合物包装的膨胀,却有可能挤压到电路板与其他零件,容易造成手机内部电路的短路或电弧产生。电弧能够产生超过摄氏20,000度的高温,将可能点燃其他聚合物材料及点燃软包装,造成手机燃烧的危险。
r2.jpg (102.06 KB, 下载次数: 1)
10:44 上传
解决手机发烫方法1.避免边充电边玩游戏、看影片或通话;2. 避免长时间通话将手机紧贴脸颊,尽量使用听筒耳机;3. 关闭不使用的后台程序;4. 在“设置”中,关闭App的自动下载、自动更新功能;5. 避免使用散热不良的保护壳,或者在发烫时去掉;6. 避免长时间使用高耗能的App程序;7. 手机若已发烫,使用手机清理软件清理一下内存会有效降温;8. 在充电的话就暂时停止使用,防止发生危险。9. 握在手上或是放在口袋都会相互传热,尽量放在通风散热的对方,有空调的话让手机也一起吹冷气吧。10. 实在不行的话,就暂时关机,让手机温度恢复正常后再继续使用。
该用户从未签到
排除了以上因软件造成的过热因素外,我发现我的最近M7时常彪至50°上下,估计是电池坏了。
该用户从未签到
我在全民福利宝领到了20000CF点,CF雷神,毁灭,大量CF点券,你也快来拿吧!我的邀请码为: http://t.cn/R5Tv84o基于Androiod平台的校园信息分类服务软件综述_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Androiod平台的校园信息分类服务软件综述
上传于||文档简介
&&基​于​A​n​d​r​o​i​o​d​平​台​的​校​园​信​息​分​类​服​务​软​件​综​述
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢awesome-android-tips项目地址:简介:收集了大家常用的一些Android代码更多:&&&&&&&&&标签:
English_Version:
这里收集了大家常用的一些 Android 代码,持续更新中,内容来自自己的平时积累和网络上看到的文章,部分原文地址在最下方。如有错误欢迎指正,如有侵权,请联系我删除。里面可能会有重复内容,请忽略或者提醒我删除。
setBackgroundResource(0) 可以移除 View 的背景色
Resources.getSystem().getDisplayMetrics().density 可以不用 Context 也能获取屏幕密度哦
通过重载 ViewGroup 的 dispatchDraw 可以实现一个简单的蒙版效果。 例如下拉刷新时,可以在 contentView 上加一层遮罩。 canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);
new 出来的 View 可以用 View.generateViewId() (API 17 以上可用)
生成 id,系统保证唯一
使用 GridView 时 android:padding 和 android:clipToPadding=&false& 配合使用效果更好哦。
在布局文件中,如果只是为了占位,可以用 Space 来取代 View。 最棒的一点是 Space 可以跳过 Draw 这个过程。
TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics) 方便 dp, px, sp 之间的转换。
Activity.startActivities() 这个方法最直接的理解就是使用 intent 开启多个 Activity
TextUtils.isEmpty() 如果传入的 String 为 NULL 或者 Length 为 0 的话就返回 true。
Html.fromHtml() 如果你对 Html 熟悉的话,可以很迅速通过这个方法处理一些富文本操作。比如超链接和图文排版等处理。
TextView.setError() 设置文本框错误提醒
Build.VERSION_CODES 有些时候我们的 app 需要根据不同的 SDK 版本进行执行不同的操作
PhoneNumberUtils.convertKeypadLettersToDigits 这个方法简单粗暴,会将输入的字母根据键盘上的映射转换为数字。
ArgbEvaluator ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。
ValueAnimator.reverse() 顺畅的取消动画效果
DateUtils.formatDateTime()) 这个方法可以输出相应格式化的时间或者日期
Pair 这个类 可以用来存储存储一”组”数据。但不是 key 和 value 的关系。
SparseArray 目前有很多地方从性能优化方说使用 SparseArray 来替换 hashMap,来节省内存,提高性能。
Linkify.addLinks() 这个类可以更方便的为文本添加超链接。
android.media.ThumbnailUtils 这个类主要是用来处理缩略图相关的工作,比如:用来获取媒体(图片、视频)的缩略图;
Bitmap.extractAlpha ();返回一个新的 Bitmap,capture 原始图片的 alpha 值。有的时候我们需要动态的修改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合 Canvas 和 Paint 可以动态的修改一个纯色 Bitmap 的颜色。
模块间有消息需要传递时,使用 LocalBroadcastManager 替代 Listener 进行模块解耦。除了解耦,这样发送消息和执行消息差一个线程循环,可以减小方法的调用链,我这就碰到一次方法调用链太长导致 StackOverflow 的问题。
静态变量不要直接或者间接引用 Activity、Service 等。这会使用 Activity 以及它所引用的所有对象无法释放,然后,用户操作时间一长,内存就会狂升。
Handler 机制有一个特点是不会随着 Activity、Service 的生命周期结束而结束。也就是说,如果你 Post 了一个 Delay 的 Runnable,然后在 Runnable 执行之前退出了 Activity,Runnable 到时间之后还是要执行的。如果 Runnable 里面包含更新 View 的操作,程序崩溃了。
不少人在子线程中更新 View 时喜欢使用 Context.runOnUiThread,这个方法有个缺点,就是一但 Context 生命周期结束,比如 Activity 已经销毁时,一调用就会崩溃。
mit 这个方法是同步的,一直到把数据同步到 Flash 上面之后才会返回,由 IO 操作的不可控,尽量使用 apply 方法代替。apply 只在 API Level&=9 才会支持,需要做兼容。不过,最新的 support v4 包已经为我们做好了处理,使用
SharedPreferencesCompat.EditorCompat.getInstance().apply(editor) 即可。
PackageManager.getInstalledPackages 这个方法经常使用,你可能不知道,当获取的结果数量比较多的时候,在某些机型上面调用它花费的时间可能秒级的,所以尽量在子线程中使用。另外,如果结果太多,超过系统设置的 Binder 数据最大传输量的上限,则会发生 TransactionException,如果你使用这个方法获取机器上的己安装应用列表,最好做一下预防。
如果使用 Context.startActivity 启动外部应用,最好做一下异常预防,因为寻找不到对应的应用时,会抛出异常。如果你要打开的是应用内的 Activity,不防使用显式 Intent,这样能提高系统搜索目标 Activity 的效率。
Application 的生命周期就是进程的生命周期。只有进程被干掉时,Application 才会销毁。哪怕是没有 Activity、Service 在运行,Application 也会存在。所以,为了减少内存压力,尽量不要在 Application 里面引用大对象、Context 等。
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);设置全屏方法一定要在 setContentView 之后
viewpager 的 setCurrentItem 一定要在 setAdapter 方法之后调用才会有效果.
判断手机是不是飞行模式
boolean isEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
TabLayout 修改字体的方法
官方的 TabLayout 没有提供修改 TextView size 的方法,可以新建一个 style CustomTabLayoutTextAppearance 继承 TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse ,然后增加 item ,设置 android:textAllCaps 为 true ,再设置 android:textSize 为你想设置的大小。
再在 TabLayout 的布局文件里设置 app:tabTextAppearance=&@style/CustomTabLayoutTextAppearance& 即可。
遍历 HashMap 的最佳方法
public static void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + & = & + pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
使用 Java 在一个区间内产生随机整数数
public static int randInt(int min, int max) {
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) +
return randomN
如果子类实现 Serializable 接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则会抛 InvalidClassException 异常。
transient 关键字修饰变量可以限制序列化。
当使用 JakeWharton 的 TabPageIndicator 时,如果需要先做一些耗时的操作,然后再展示 TabPageIndicator 的话,需要先设置 mIndirector.setVisibility(View.GONE);然后耗时任务结束以后再 mIndirector.setVisibility(View.VISIBLE);否则会报错
类继承之间的调用顺序 父类 static 成员 -& 子类 static 成员 -& 父类普通成员初始化和初始化块 -& 父类构造方法 -& 子类普通成员初始化和初始化块 -& 子类构造方法
华为手机无法显示 log 解决方案,.拨号界面输入(*#*#2846579#*#*) Service menu will appear.Go to &ProjectMenu& -& &Background Setting& -& &Log Setting&Open &Log switch& and set it to ON.Open &Log level setting& and set the log level you wish.
后台 service 经常因为重启之类的出现 onStartCommand()中的 Intent 传递的参数为 null, 通过在 onStartCommand()中的返回值改成 return super.onStartCommand(intent, Service.START_REDELIVER_INTENT, startId); 可以解决问题。下面介绍几个 flag 的意思
| ------------- |:-------------:|
| START_STICKY | 如果 service 进程被 kill 掉,保留 service 的状态为开始状态,但不保留递送的 intent 对象。随后系统会尝试重新创建 service,由于服务状态为开始状态,所以创建服务后一定会调用 onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到 service,那么参数 Intent 将为 null。 |
| START_NOT_STICKY | “非粘性的”。使用这个返回值时,如果在执行完 onStartCommand 后,服务被异常 kill 掉,系统不会自动重启该服务。 |
|START_REDELIVER_INTENT|重传 Intent。使用这个返回值时,如果在执行完 onStartCommand 后,服务被异常 kill 掉,系统会自动重启该服务,并将 Intent 的值传入。|
|START_STICKY_COMPATIBILITY|START_STICKY 的兼容版本,但不保证服务被 kill 后一定能重启。
不能在 Activity 没有完全显示时显示 PopupWindow 和 Dialog
在多进程之间不要用 SharedPreferences 共享数据,虽然可以(MODE_MULTI_PROCESS),但极不稳定
有些时候不能使用 Application 的 Context,不然会报错(比如启动 Activity,显示 Dialog 等)
*备注:大家注意看到有一些 NO 上添加了一些数字,其实这些从能力上来说是 YES,但是为什么说是 NO 呢?下面一个一个解释:
数字 1:启动 Activity 在这些类中是可以的,但是需要创建一个新的 task,一般情况不推荐;
数字 2:在这些类中去 layout inflate 是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用;
数字 3:在 Receiver 为 null 时允许,在 4.2 或以上的版本中,用于获取黏性广播的当前值。(可以无视);
ContentProvider、BroadcastReceiver 之所以在上述表格中,是因为在其内部方法中都有一个 context 用于使用。
谨慎使用 Android 的透明主题,透明主题会导致很多问题,比如:如果新的 Activity 采用了透明主题,那么当前 Activity 的 onStop 方法不会被调用;在设置为透明主题的 Activity 界面按 Home 键时,可能会导致刷屏不干净的问题;进入主题为透明主题的界面会有明显的延时感
不要在非 UI 线程中初始化 ViewStub,否则会返回 null
尽量不要通过 Application 缓存数据,这不稳定
华为手机无法打开 USB 调试的问题,
插好数据线,拨号界面 输入 ##2846579## 进入工程模式
projectmenu→3 后台设置→4USB 端口配置→Balong 调试模式,点确定
不要拔线,退出工程模式,直接重启手机,电脑中显示可移动磁盘(若仍未出现,重复步骤 1、2)
这个是关闭 USB 调试的情况下电脑中使用手机的可移动磁盘的方法,使用后下拉菜单中 usb 选项也回来了。
android listview 中的消息被软键盘遮挡了,在设置 listview 的时候加上 android:transcriptMode=&normal&就好了
TextUtils 是一个非常好用的工具类,把 List 转成字符串,逗号分隔,逗号分隔的 String 字符串,切割成 List ,分别可以用 TextUtils 的 join 和 split 方法。如果要对 List 去重,则可以用 Collection 的 frequency 方法。
在 activity 中调用 moveTaskToBack (boolean nonRoot)方法即可将 activity 退到后台,注意不是 finish()退出。
activity 中的 runOnUiThrea(Runnable action)方法可以直接回到主线程
listview 有个 footerDividersEnabled 和 headerDividersEnabled 方法可以设置 listview 的顶部和底部 divide,但是必须保证你设置了 headview 和 footview 才会有效果
Throwable 类中的 getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为 StackTraceElement[];
StackTraceElement 类,其中四个方法 getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印 Log 时非常有用;
UncaughtExceptionHandler 接口,再好的代码异常难免,利用此接口可以对未捕获的异常善后
Resources 类中的 getIdentifier(name, defType, defPackage)方法,根据资源名称获取其 ID,做 UI 时经常用到;
view 的 isShown 方法,只有当 view 本身以及它的所有祖先们都是 visible 时,isShown()才返回 TRUE。而平常我们调用 if(view.getVisibility() == View.VISIBLE)只是对 view 本身而不对祖先的可见性进行判断。
Arrays 类中的一系列关于数组操作的工具方法:binarySearch(),asList(),equals(),sort(),toString(),copyOfRange()等;Collections 类中的一系列关于集合操作的工具方法:sort(),reverse()等;
TextView 类中的 append(CharSequence)方法,添加文本。一些特殊文本直接用+连接会变成 String;
System 类中的 arraycopy(src, srcPos, dest, destPos, length)方法,用来 copy 数组;
Fragment 类中的 onHiddenChanged(boolean)方法,使用 FragmentTransaction 中的 hide(),show()时只会调用 Fragment 中的 show 和 hidden 状态,其他生命周期不会调用。
Activity 类中的 onWindowFocusChanged(boolean),onNewIntent(intent)等回调方法;
TextView 类中的 setTransformationMethod(TransformationMethod)方法,可用来实现“显示密码”功能
PageTransformer 接口,用来自定义 ViewPager 页面切换动画,用 setPageTransformer(boolean, PageTransformer)方法来进行设置;
apache 提供的一系列 jar 包:commons-lang.jar,commons-collections.jar,commons-beanutils.jar 等,里面很多方法可能是你曾经用几十几百行代码实现过的,但是执行效率或许要差很多,比如:ArrayUtils,StringUtils……;
ActivityLifecycleCallbacks 接口,用于在 Application 类中监听各 Activity 的状态变化
ActionBar.hide()/.show() 顾名思义,隐藏和显示 ActionBar,可以优雅地在全屏和带 Actionbar 之间转换。
SystemClock.sleep() 这个方法在保证一定时间的 sleep 时很方便,通常我用来进行 debug 和模拟网络延时。
UrlQuerySanitizer——使用这个工具可以方便对 URL 进行检查。
ActivityOptions ——方便的定义两个 Activity 切换的动画。 使用 ActivityOptionsCompat 可以很好解决旧版本的兼容问题。
getParent().requestDisallowInterceptTouchEvent(true);剥夺父 view 对 touch 事件的处理权,谁用谁知道。
HandlerThread,代替不停 new Thread 开子线程的重复体力写法。
IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的 Service
Executors. newSingleThreadExecutor();这个是 java 的,之前不知道它,自己花很大功夫去研究了单线程顺序执行的任务队列
android:animateLayoutChanges=&true&,LinearLayout 中添加 View 的动画的办法,支持通过 setLayoutTransition()自定义动画。
AsyncQueryHandler,如果做系统工具类的开发,比如联系人短信辅助工具等,肯定免不了和 ContentProvider 打交道,如果数据量不是很大的情况下,随便搞,如果数据量大的情况下,了解下这个类是很有必要的,需要注意的是,这玩意儿吃异常..
ViewFlipper,实现多个 view 的切换(循环),可自定义动画效果,且可针对单个切换指定动画。
android util 包中的 Pair 类,可以方便的用来存储一&组&数据。注意不是 key value
android:descendantFocusability,ListView 的 item 中 CheckBox 等元素抢焦点导致 item 点击事件无法响应时,除了给对应的元素设置 focusable,更简单的是在 item 根布局加上 android:descendantFocusability=”blocksDescendants”
includeFontPadding=&false&,TextView 默认上下是有一定的 padding 的,有时候我们可能不需要上下这部分留白,加上它即可。
Messenger,面试的时候通常都会被问到进程间通信,一般情况下大家都是开始背书,AIDL 巴拉巴拉。。有一天在鸿神的博客看到这个,嗯,如他所说,又可以装一下了。
EditTxt.setImeOptions, 使用 EditText 弹出软键盘时,修改回车键的显示内容(一直很讨厌用回车键来交互,所以之前一直不知道这玩意儿)
java8 中新增的 LocalDate 和 LocalTime 接口,Date 虽然是个万能接口,但是它真的不好用,有了这俩,终于可以愉快的处理日期时间了。
WeakHashMap,直接使用 HashMap 有时候会带来内存溢出的风险,使用 WaekHashMap 实例化 Map。当使用者不再有对象引用的时候,WeakHashMap 将自动被移除对应 Key 值的对象。
使用 SnackBar 的时候,不要使用 view.getRootView()作为 snackbar 的 view,华为荣耀 7 会出问题。
设置 TextView 单行显示的时候不要用 Lines=1,而要用 singleLine=&true& ,因为魅族部分手机在设置 Lines=1 的时候,然后 TextView 的值全为数字的时候, 你就会懵逼了.
TouchDelegate 可用于更改 View 的触摸区域。场景:比如在 RecyclerView 的 ItemView 里包含了 CheckBox 组件, 然后想实现点击 ItemView 的时候,也可以触发 CheckBox,就可以使用此类
ArgbEvaluator 可用于计算不同颜色值之间的插值,配合 ValueAnimator.ofObject 或者 ViewPager.PageTransformer 使用,可以实现不同颜色之间的平滑过渡。
Palette 可用于提取一张图片的颜色。
ViewDragHelper,做过自定义 ViewGroup 的童鞋都应该知道这个东西吧,用来处理触摸事件的神器,妈妈再也不用担心我自定义控件了。
PageTransformer 用于定义 ViewPager 页面切换时的动画效果(淡入淡出,放大缩小神马的…)官方有例子,直接看吧。
Formatter.formatFileSize() 这个方法会格式化数据的大小,根据输入的字节大小,返回 B KB MB GB 等等(最大支持到 PB)。当然要注意的是输入的最大值是 Long.MAX_VALUE.
Activity.recreate 重新创建 Activity。有什么用呢?可以在程序更换主题后,立马刷新当前 Activity,而不会有明显的重启 Activity 的动画。
View.getContext 顾名思义,就不用解释了吧…以前在写 RecyclerView 的 Adapter 的时候,为了使用 LayoutInflater,经常傻乎乎地在构造函数中传入一个外部的 context….是不是只有我不知道而已(笑 cry 脸)
View.post 方便在非 UI 线程对界面进行修改,与 Handler 的作用类似。并且由于 post 的 Runnable 会保证在该 View 绘制完成的前提下才调用,所以一般也可以用于获取 View 的宽高。
Activity.runOnUiThread 与 View.post 类似,方便在非 UI 线程中对界面进行修改。
Fragment 在配合 PagerAdapter 使用的时候可以重写 setUserVisibleHintFragment()方法,然后根据参数的布尔值(true 的话表示当前 Fragment 对用户可见),来执行一些逻辑。
android:animateLayoutChanges 这是一个非常酷炫的属性。在父布局加上 android:animateLayoutChanges=&true& 后,如果触发了 layout 方法(比如它的子 View 设置为 GONE),系统就会自动帮你加上布局改变时的动画特效!!
android:clipToPadding 设置父 view 是否允许其子 view 在它的 padding(这里指的是父 View 的 padding)中绘制。是不是有点绕?举个实际场景吧:假如有个 ListView,我们想要在初始位置时,第一项 Item 离顶部有 10dp 的距离,就可以在 ListView 的布局中加入 android:clipToPadding=&false& android:paddingTop=&10dp&即可。是不是很方便呢?
rv 的 Layoutmanager 可以直接申明在 xml 中,具体代码可查看 RecyclerView.createLayoutManager 方法.
RecyclerView 在 23.2.+的版本中新增了自动测量的功能,由于新增了自动测量,那么它的 item 的根布局在需要测量的方向上就不能写 match_parent 了,需要改成 wrap_content
getParent().requestDisallowInterceptTouchEvent(true);剥夺父 view 对 touch 事件的处理权,谁用谁知道。
Canvas 中 clipRect、clipPath 和 clipRegion 剪切区域的 API。
GradientDrawable 有个阴影效果还不错,以为是切的图片,一看代码,什么鬼= =!
有朋友提到了在自定义 View 时有些方法在开启硬件加速的时候没有效果的问题,在 API16 之后确实有很多方法不支持硬件加速,通常我们关闭硬件加速都是在清单文件中通过,其实 android 也提供了针对特定 View 关闭硬件加速的方法,调用 View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);即可。
PointF,graphics 包中的一个类,我们经常见到在处理 Touch 事件的时候分别定义一个 downX,一个 downY 用来存储一个坐标,如果坐标少还好,如果要记录的坐标过多那代码就不好看了。用 PointF(float x, float y);来描述一个坐标点会清楚很多。
StateListDrawable,定义 Selector 通常的办法都是 xml 文件,但是有的时候我们的图片资源可能是从服务器动态获取的,比如很多 app 所谓的皮肤,这种时候就只能通 StateListDrawable 来完成了,各种 addState 即可。
android:duplicateParentState=&true&,让子 View 跟随其 Parent 的状态,如 pressed 等。常见的使用场景是某些时候一个按钮很小,我们想要扩大其点击区域的时候通常会再给其包裹一层布局,将点击事件写到 Parent 上,这时候如果希望被包裹按钮的点击效果对应的 Selector 继续生效的话,这时候 duplicateParentState 就派上用场了。
ViewConfiguration.getScaledTouchSlop();触发移动事件的最小距离,自定义 View 处理 touch 事件的时候,有的时候需要判断用户是否真的存在 movie,系统提供了这样的方法。
ViewStub,有的时候一块区域需要根据情况显示不同的布局,通常我们都会通过 setVisibility 的方法来显示和隐藏不同的布局,但是这样默认是全部加载的,用 ViewStub 可以更好的提升性能。
onTrimMemory,在 Activity 中重写此方法,会在内存紧张的时候回调(支持多个级别),便于我们主动的进行资源释放,避免 OOM。
TextView.setCompoundDrawablePadding,代码设置 TextView 的 drawable padding。
ImageSwitcher,可以用来做图片切换的一个类,类似于幻灯片。
在自定义控件的时候,能用 drawable 来绘制圆,或者其他样式的时候,尽量用 drawable,因为 drawable 的效果要远胜于 canvas.drawXXX().
如果想要自定义 View 支持 SwipeRefreshLayout,只需要声明并实现 ScrollingView 接口即可,RecyclerView 和 NestedScrollView 已经实现此接口。
AtomicFile——通过使用备份文件进行文件的原子化操作。这个知识点之前我也写过,不过最好还是有出一个官方的版本比较好。
DatabaseUtils——一个包含各种数据库操作的使用工具。
Activity.isChangingConfigurations ()——如果在 Activity 中 configuration 会经常改变的话,使用这个方法就可以不用手动做保存状态的工作了。
SearchRecentSuggestionsProvider——可以创建最近提示效果的 provider,是一个简单快速的方法。
android:clipChildren (ViewGroup)——如果此属性设置为不可用,那么 ViewGroup 的子 View 在绘制的时候会超出它的范围,在做动画的时候需要用到。
android:fillViewport (ScrollView)——在这片文章中有详细介绍文章链接,可以解决在 ScrollView 中当内容不足的时候填不满屏幕的问题。
android:tileMode (BitmapDrawable)——可以指定图片使用重复填充的模式。
android:enterFadeDuration/android:exitFadeDuration (Drawables)——此属性在 Drawable 具有多种状态的时候,可以定义它展示前的淡入淡出效果。
Log.wtf()的意思是 What a Terrible Failure,而不是 What The Fuck!
使用 RenderScript 虚化图片效果。如果你的 app 的 minSDK 为 16 或者更低,你需要使用 support 模式,因为很多方法都是在 API 17 之后添加的。renderscriptTargetApi 最高到 23,但是你应该把它设置到能保持脚本中使用到的功能完整的最低 API。如果你想在 support 模式下 target API 21+你必须使用 gradle-plugin 2.1.0 和 buildToolsVersion “23.0.3” 或者以上。需要在 gradle 中添加 renderscriptTargetApi 18,renderscriptSupportModeEnabled true 这两句话
public static Bitmap blurBitmap(Context context, Bitmap src, int radius) {
Bitmap dest = src.copy(src.getConfig(), true);
RenderScript rs = RenderScript.create(context);
Allocation allocation = Allocation.createFromBitmap(rs, src);
Type t = allocation.getType();
Allocation blurredAllocation = Allocation.createTyped(rs, t);
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
blurScript.setRadius(radius);
blurScript.setInput(allocation);
blurScript.forEach(blurredAllocation);
blurredAllocation.copyTo(dest);
allocation.destroy();
blurredAllocation.destroy();
blurScript.destroy();
t.destroy();
rs.destroy();
如果想把一个 view 保存为 Bitmap,正常情况下用第一种方法就可以了,但是如果是 ScrollView,则必须采用第二种方法。
当 Activity LauncherMode 为 singleTask singleInstance 时,使用 startActivityForResult 会立马返回,不能正常调用。具体请看
当 PopupWindow 中有 EditText 控件时,因为 Popupwindow 默认没有获取到焦点,需要手动设置焦点,这样子 view 才能获取到事件的监听。所以你需要在创建完 popwindow 后设置他的焦点,popupWindow.setFocusable(true);就可以让 EditText 获取焦点。
PopupWindow 默认点击外部的时候不消失,需要对 PopupWindow 设置一个背景图 popWindow.setBackgroundDrawable(new BitmapDrawable());要创建一个空对象,设置为 null 是不行的,或者就创建一个全透明的背景图。
android 中的序列化官方推荐 Parceble,其实 Parceble 最好用于内存之间数据的交换,如果要把数据写入硬盘的话,推荐实现 Serializable
tools 标签可以很好的帮助开发者实时预览 xml 的效果,并且运行以后 tools 标签的内容不会展示出来.例如:
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
tools:text=&这段话只在预览时能看到,运行以后就看不到了& /&
android studio 2.1 起已经支持 jdk8 了,使用的时候要在 gradle 中加上,需要把 buildToolsVersion 更新到 24 以上的版本
defaultConfig {
jackOptions {
enabled true
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
6.0 之后 getResources().getColor()方法被废弃了,大家可以用 ContextCompat.getColor(context, R.color.color_name)替换,ContextCompat 是 v4 包里的,请放心使用,另外还有 getDrawable()等方法
图片的资源文件官方推荐只把 launcher 放在 mipmap 文件夹下面,而 app 用到的资源文件建议放在 drawable 下面。
SharedPreference.Editor 的 apply 是异步操作,不会返回成功的状态,而 commit 是同步操作,因此,在多个并发的提交 commit 的时候,他们会等待正在处理的 commit 保存到磁盘后再操作下一个数据,从而降低了效率。
如果你在 manifest 中把一个 activity 设置成 android:windowSoftInputMode=&adjustResize&,那么 ScrollView(或者其它可伸缩的 ViewGroups)会缩小,从而为软键盘腾出空间。但是,如果你在 activity 的主题中设置了 android:windowFullscreen=&true&,那么 ScrollView 不会缩小。这是因为该属性强制 ScrollView 全屏显示。然而在主题中设置 android:fitsSystemWindows=&false& 也会导致 adjustResize 不起作用
在 Android 4.0 以后,在 Manifest.xml 中静态注册的广播,程序安装后必须启动一次才能接收到广播,比如你的应用监听开机启动的广播,必须要你的程序被运行过才能监听到
Activity 的 onDestory 方法调用时机是不确定的(有时候离开界面很久之后才会调用 onDestory 方法),应该避免指望通过 onDestory 方法去释放与 Activity 相关的资源,否则会导致一些随机 bug
2.X 时代 Bitmap 对象虽然存储在堆内存中,但是用了一个 byte 数组存储其像素信息。通过计数器来记录该像素信息被引用的个数。有人认为这个 byte 数组在 native 堆中,但事实上它也在堆中。只有在使用者调用 recycle()后,Bitmap 对象才会释放像素信息,才会在失去引用后被垃圾回收机制销毁。再加上 DVM 的 heap size 有严格的阀值,所以在使用大量图片资源的时候,及其容易发生 OOM。解决办法一般都是,用一个哈希表存储 Bitmap 对象的软引用,作为内存缓存,并在适当时机掉用其 recycle()。3.0 以上版本 Bitmap 对象可以通过垃圾回收机制完全销毁,理论上不用再调用 recycle()。
.gitignore 只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore 是无效的。那么解决方法就是先把本地缓存删除(改变成未 track 状态),然后再提交:
git rm -r --cached .
git commit -m 'update .gitignore'
时间戳请使用 long 或者 String 类型接收,遇到的坑,由于项目中的 model 好多都是通过 GsonFormat 生成的,服务器给的 json 中的时间戳都是 10 位的,导致了 GsonFormat 自动解析成了 int, 当测试人员选择时间为 2100 年的时候时间戳是 4 开头的十位 用 int 类型接收越界了,导致报错
为你的 app 添加默认布局样式,比如:每一个控件都需要写 width 和 height 属性,然而很多的控件的宽高属性都是 wrap_content,那么我们可以通过在 style 文件添加如下样式:
&style name=&Theme.YourApp& parent=&android:style/Theme.Light&&
&item name=&android:layout_width&&wrap_content&/item&
&item name=&android:layout_height&&wrap_content&/item&
这样,控件的宽高默认都是 wrap_content 样式啦。
在 style 中写的样式通过视同 parent 标签来扩展你的样式,这样更高效。
&style name=&Fill&&
&item name=&android:layout_width&&fill_parent&/item&
&item name=&android:layout_height&&fill_parent&/item&
&style name=&Fill.Height& parent=&@style/Fill&&
&item name=&android:orientation&&vertical&/item&
Android 上的应用切换按钮列出的其实不是应用而是 Task,所以你会看到有的应用在切换视图里有多个任务。如果你的应用中有逻辑上相互独立的部分,或者想在多窗口环境下并排显示应用的两个不同部分,这种情况就适合多任务了。使用 manifest 属性(静态)或者 intent flags(动态)可以实现这一点,详见视频:
当 app 的 theme 用的是 NoActionBar,但是在 layout 中仍然用到 toolbar 的时候,不要在 style 文件中加 fitsSystemWindows 属性,而是在用到 toolbar 的 layout 最外层加 fitsSystemWindows,否则当你使用 EditText,在小米手机上长按 EditText 调出系统粘贴功能的时候,粘贴的 layout 的布局会错位.
当 WebView 与 ScrollView 嵌套使用,并且 WebView 有字体放大缩小的功能时,当切换 webview 的字体后,webview 的高度并不能很好的计算出来,这时候可以通过注入的方式,让 js 算出高度,经测试,这样是最可靠的,代码地址:
Context 类中的 createPackageContext(packageName, flags)方法,可用来获取指定包名应用程序的 Context 对象。
TextView 类的 setKeyListener(KeyListener)方法;
其中 DigitsKeyListener 类,使用 getInstance(String accepted)方法即可指定 EditText 可输入字符集;
View 类中的 getLocationInWindow(int[])方法和 getLocationOnScreen(int[])方法,获取 View 在窗口/屏幕中的位置;
Context.getCacheDir() - 可以获取到 app 默认的缓存路径。
StaticLayout 在自定义控件绘制文本的时候很有用。
Android 中的四大组件千万不要通过 new 的方式创建出来。
测试 app 的时候,我们大都想要将 debug 和 release 版本同时安装到手机里,可以通过在 gradle 中修改 applicationid 来实现:
buildTypes {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
在大多数的登陆界面中,都提供了用户是否让密码可见的选项,Support Library 24.2.0 提供了官方的实现,TextInputLayout 中添加了 passwordToggleEnabled 属性来开启此功能,并且可以通过 passwordToggleDrawable 设置图标。(摘自:Android 笔记的微博)
同样,在 Support Library 24.2.0 中增加 RecyclerView 在快速滚动时的回调接口,SnapHelper 是官方的一个实现 OnFlingListener 的 一个抽象类,LinearSnapHelper 则是一个完整的实现.LinearSnapHelper 默认实现的功能是类似 ViewPager,在滚动结束后,会选择列表某一条居中展示(这里有开始位置展示,或者结束位置显示).例如:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
摘自如下地址(部分):
Copyright 2016 NewTab
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
loading自己记录、分享给好友:}

我要回帖

更多关于 od 系统领空 的文章

更多推荐

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

点击添加站长微信