Android:
     知识点:
  • 子线程中无法更新UI,因为UI是线程不安全的。

    • Android的UI单线程模式:
      1. 不能阻塞UI线程;
      2. 不能从UI线程的外部访问Android UI toolkit。
      3. 需要更新UI可以使用Handler传值。具体使用方式如学习总结五:
 
实践项目:
一键清理内存
功能:实现Android中,结束当前活跃APP进程,释放内存的Demo。
 
知识点:
  • 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的更多相关文章

  1. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  2. 深度学习(二十六)Network In Network学习笔记

    深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...

  3. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  4. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  5. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  6. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. wlan-mcs来自百度百科

    工作原理 802.11n射频速率的配置通过MCS(Modulation and Coding Scheme,调制与编码策略)索引值实现.MCS调制编码表是802.11n为表征WLAN的通讯速率而提出的 ...

  2. SCI Index

    Nature.[link]                                       Science.[link]                                  ...

  3. maven配置阿里云镜像

    编辑%maven_home%/conf/settings.xml文件,添加 <mirror> <id>aliyun-maven</id> <mirrorOf& ...

  4. 分享我开发的网络电话Android手机APP正式版,图文详解及下载

    分享我开发的网络电话Android手机APP正式版,图文详解及下载 分享我开发的网络电话Android手机APP正式版 实时语音通讯,可广域网实时通讯,音质清晰流畅! 安装之后的运行效果: 第一次安装 ...

  5. 《IO 系统性能》笔记

    近期项目中涉及和别人谈存储架构及选型,将IOPS相关的内容学习下.参考网上资料<IO 系统性能之一:衡量性能的几个指标> 1. 基本概念 1)读写IO操作:对应磁盘的存数据.取数据: 2) ...

  6. 【C语言学习】《C Primer Plus》第3章 数据和C

    学习总结 1.C基本数据类型使用11个关键字:int.long.short.unsigned.char.float.double.signed._Bool._Complex和_Imaginary. 2 ...

  7. AWS系列之一 亚马逊云服务概述

    云计算经过这几年的发展,已经不再是是一个高大上的名词,而是已经应用到寻常百姓家的技术.每天如果你和互联网打交道,那么或多或少都会和云扯上关系.gmail.github.各种网盘.GAE.heroku等 ...

  8. 大叔也说Xamarin~Android篇~日志的记录

    回到目录 无论哪个平台,开始哪种应用程序,日志总是少不了的,大家在Lind.DDD里也可以看到大叔的日志组件,而在xamarin进行移动开发时,为了更好的调试,记录运行的情况,日志也是必须的,这讲主要 ...

  9. MVVM架构~使用boxy和knockoutjs实现编辑功能

    返回目录 这个功能我认为非常有用,尤其在后台管理系统中,它对用户来说,使用体验这块非常不错,下面是它的截图

  10. Node.js入门:Node.js&NPM的安装与配置

    Node.js安装与配置      Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0. ...