每日学习总结<二> 2015-9-1
- 子线程中无法更新UI,因为UI是线程不安全的。
- Android的UI单线程模式:
- 不能阻塞UI线程;
- 不能从UI线程的外部访问Android UI toolkit。
- 需要更新UI可以使用Handler传值。具体使用方式如学习总结五:
- Android的UI单线程模式:
- ActivityManager的用法等等
public String getMemoryState(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(info);
// Log.e(MainActivity.TAG, "剩余内存" + (info.availMem >> 100000) + "M");
Log.e(MainActivity.TAG, "是否处于低内存:" + info.lowMemory);
Log.e(MainActivity.TAG, "threshold: " + info.threshold);
memoryValueLong = (info.availMem / 1048576);
memoryValueString = Long.toString(memoryValueLong);
Log.e(MainActivity.TAG, "可用内存: " + memoryValueString + "MB");
return memoryValueString;
}
public long getMemoryValueLong(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(info);
// Log.e(MainActivity.TAG, "剩余内存" + (info.availMem >> 100000) + "M");
Log.e(MainActivity.TAG, "是否处于低内存:" + info.lowMemory);
Log.e(MainActivity.TAG, "threshold: " + info.threshold);
memoryValueLong = (info.availMem / 1048576);
return memoryValueLong;
}
public void killProcess() {
ActivityManager activityManager2 = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infoList = activityManager2.getRunningAppProcesses();
List<ActivityManager.RunningServiceInfo> serviceInfoList = activityManager2.getRunningServices(200);
long beforeMem = getMemoryValueLong(MainActivity.this);
Log.d(TAG, "-----------before memory info : " + beforeMem);
int count = 0;
if (infoList != null) {
for (int i = 0; i < infoList.size(); ++i) {
ActivityManager.RunningAppProcessInfo appProcessInfo = infoList.get(i);
Log.e(TAG, "process name : " + appProcessInfo.processName);
//importance 该进程的重要程度 分为几个级别,数值越低就越重要。
Log.e(TAG, "importance : " + appProcessInfo.importance);
// 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了
// 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE的进程都是非可见进程,也就是在后台运行着
if (appProcessInfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE) {
String[] pkgList = appProcessInfo.pkgList;
for (int j = 0; j < pkgList.length; ++j) {
Log.e(MainActivity.TAG, "Killed package name: " + pkgList[j]);
activityManager2.killBackgroundProcesses(pkgList[j]);
count++;
}
}
long clearAfeterMemoryState = getMemoryValueLong(MainActivity.this);
Toast.makeText(MainActivity.this, "已清理内存:" + Long.toString(beforeMem - clearAfeterMemoryState) + " 当前内存为: " + Long.toString(clearAfeterMemoryState), Toast.LENGTH_SHORT).show();
}
}
}
- 创建快捷方式:
private void addShortCut() {
Log.e(MainActivity.TAG, "====addShortCut()====");
Intent shortCutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//快捷方式名称
shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
shortCutIntent.putExtra("duplicate", false);
ComponentName componentName = new ComponentName(this.getPackageName(), "." + this.getLocalClassName());
shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, new Intent(Intent.ACTION_MAIN).setComponent(componentName));
//快捷方式的图标
Intent.ShortcutIconResource iconResource = new Intent.ShortcutIconResource().fromContext(this, R.drawable.ic_launcher);
shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
sendBroadcast(shortCutIntent);
}
每日学习总结<二> 2015-9-1的更多相关文章
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- 深度学习(二十六)Network In Network学习笔记
深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...
- crawler4j 学习(二)
crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- AspectJ基础学习之二搭建环境(转载)
AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
随机推荐
- wlan-mcs来自百度百科
工作原理 802.11n射频速率的配置通过MCS(Modulation and Coding Scheme,调制与编码策略)索引值实现.MCS调制编码表是802.11n为表征WLAN的通讯速率而提出的 ...
- SCI Index
Nature.[link] Science.[link] ...
- maven配置阿里云镜像
编辑%maven_home%/conf/settings.xml文件,添加 <mirror> <id>aliyun-maven</id> <mirrorOf& ...
- 分享我开发的网络电话Android手机APP正式版,图文详解及下载
分享我开发的网络电话Android手机APP正式版,图文详解及下载 分享我开发的网络电话Android手机APP正式版 实时语音通讯,可广域网实时通讯,音质清晰流畅! 安装之后的运行效果: 第一次安装 ...
- 《IO 系统性能》笔记
近期项目中涉及和别人谈存储架构及选型,将IOPS相关的内容学习下.参考网上资料<IO 系统性能之一:衡量性能的几个指标> 1. 基本概念 1)读写IO操作:对应磁盘的存数据.取数据: 2) ...
- 【C语言学习】《C Primer Plus》第3章 数据和C
学习总结 1.C基本数据类型使用11个关键字:int.long.short.unsigned.char.float.double.signed._Bool._Complex和_Imaginary. 2 ...
- AWS系列之一 亚马逊云服务概述
云计算经过这几年的发展,已经不再是是一个高大上的名词,而是已经应用到寻常百姓家的技术.每天如果你和互联网打交道,那么或多或少都会和云扯上关系.gmail.github.各种网盘.GAE.heroku等 ...
- 大叔也说Xamarin~Android篇~日志的记录
回到目录 无论哪个平台,开始哪种应用程序,日志总是少不了的,大家在Lind.DDD里也可以看到大叔的日志组件,而在xamarin进行移动开发时,为了更好的调试,记录运行的情况,日志也是必须的,这讲主要 ...
- MVVM架构~使用boxy和knockoutjs实现编辑功能
返回目录 这个功能我认为非常有用,尤其在后台管理系统中,它对用户来说,使用体验这块非常不错,下面是它的截图
- Node.js入门:Node.js&NPM的安装与配置
Node.js安装与配置 Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0. ...