首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

【Android开发坑系列】之Fragment

这个东西有顾名思义是碎片,和之前的Activity对应。 坑1:一般情况都会想当然的以为进程被杀掉之后,Fragment也会被回收 其实,Fragment有自己的生命周期,有自己的管理器(FragmentManager),也即:包含Fragment的进程被干掉,Fragment不一定会被回收,而是由FragmentManager来决定生死。 Q:如何验证上面的说法?A:如果是一般正常的流程“打开-关闭”软件,Fragment的确被回收了。但是如果使用“腾讯手机管家”之类的内存清理工具,清理内存(实际上是杀死进程),会发现Fragment没有被回收,一直缓存着。验证方法如下:缓存Fragment的Tag到本地数据库(可以是xml/sqlite等),然后用FragmentManager.findFragmentByTag(...)是否为Null来验证Framgent是否被回收了。 有个奇怪的现状是:在上面蓝色的情况发生后,Framgent和包含他的Activity的生命周期顺序都乱套了,原本是: Activity.onCreate-->Fragment.onCreate-->Fragment.onCreateView 变成:Fragment.onCreate-->Activity.onCreate-->Fragment.onCreateView 猜测是因为直接用的Frament缓存,其onCreate先于父Activity.onCreate执行了。 坑2:添加Fragment注意事项,阅读:http://www.tuicool.com/articles/qaA7ry 本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/p/3178442.html,如需转载请自行联系原作者。

优秀的个人博客,低调大师

android studio常用快捷键

快捷键 用途描述 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+Space 自动补全代码 Ctrl+空格 代码提示 Ctrl+Alt+Space 类名或接口名提示 Ctrl+P 方法参数提示 Ctrl+Shift+Alt+N 查找类中的方法或变量 Alt+Shift+C 对比最近修改的代码 Shift+F6 重构-重命名 Ctrl+X 删除行 Ctrl+U 导航到父类 Ctrl+O 重写或实现父类 Ctrl+D 复制行 Ctrl+/ 行注释 Ctrl+Shift+/ 代码段注释 Ctrl+J 自动代码 Ctrl+E 最近打开的文件 Ctrl+H 显示类结构图 Ctrl+Q 显示注释文档 Alt+F1 查找代码所在位置 Alt+1 快速打开或隐藏工程面板 Ctrl+Alt+left/right 返回至上次浏览的位置 Alt+left/right 切换代码视图 Alt+Up/Down 在方法间快速移动定位 Ctrl+Shift+Up/Down 代码向上/下移动 F2或Shift+F2 高亮错误或警告快速定位 Ctrl+Shift+F7 高亮显示所有该文体,按Esc高亮消失 Alt+F3 逐个往下查找相同文本 Ctrl+E 显示最近编辑的文件列表 Ctrl+[或] 可以跳到大括号的开头结尾 Ctrl+Shift+Backspace 可以跳转到上次编辑的地方 Ctrl+F7 当前元素在当前文件中的引用 Ctrl+P 可以显示参数信息 Ctrl+Alt+T 可以把代码包在一块内,例如try/catch

优秀的个人博客,低调大师

Android -- 触摸Area对焦区域(更新)

老早就想找关于不同点击不同地方的对焦,但是一直没有找到,现在项目又需要这个功能,又跑出来找找,最后还是找到啦~~关于对焦更多的是关于自动对焦。 废话不多说,直接来干货,主要是setFocusAreas方式实现的。 每个对角区域是一个具有特定权值的长方形。方向与重力感应的方向有关。这个方向不会受到setDisplayOrientation(int)设置的影响。矩形的坐标范围从-1000到1000 ,(-1000,-1000)是左上角点(1000,1000)是右下角点。对焦区域的长或宽不能为0或负数,而权值的取值范围是1-1000,权值为矩形范围像素所平分,这意味着同样的权值对焦区域大的对整体的对焦影响小。 Code private Rect calculateTapArea(float x, float y, float coefficient) { float focusAreaSize = 200; int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue(); Log.i("calculateTapArea", "areaSize--->" + areaSize);//300 Log.i("calculateTapArea", "x--->" + x + ",,,y--->" + y);//对的 int centerX = (int) ((x / getResolution().width) * 2000 - 1000); int centerY = (int) ((y / getResolution().height) * 2000 - 1000); Log.i("calculateTapArea", "getResolution().width--->" + getResolution().width + ",,,,getResolution().height--->" + getResolution().height); int left = clamp(centerX - (areaSize / 2), -1000, 1000); int top = clamp(centerY - (areaSize / 2), -1000, 1000); RectF rectF = new RectF(left, top, left + areaSize, top + areaSize); Log.i("calculateTapArea", "left--->" + left + ",,,top--->" + top + ",,,right--->" + (left + areaSize) + ",,,bottom--->" + (top + areaSize)); Log.i("calculateTapArea", "centerX--->" + centerX + ",,,centerY--->" + centerY); return new Rect(Math.round(rectF.left), Math.round(rectF.top), Math.round(rectF.right), Math.round(rectF.bottom)); } private int clamp(int x, int min, int max) { if (x > max) { return max; } if (x < min) { return min; } return x; } public Camera.Size getResolution() { Camera.Parameters params = myCamera.getParameters(); Camera.Size s = params.getPreviewSize(); return s; } 在OnTouch事件里面调用此方法。 public void focusOnTouch(MotionEvent event) { Rect focusRect = calculateTapArea(event.getRawX(), event.getRawY(), 1f); Rect meteringRect = calculateTapArea(event.getRawX(), event.getRawY(), 1.5f); Camera.Parameters parameters = mCamera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); if (parameters.getMaxNumFocusAreas() > 0) { List<Camera.Area> focusAreas = new ArrayList<Camera.Area>(); focusAreas.add(new Camera.Area(focusRect, 600)); parameters.setFocusAreas(focusAreas); } if (parameters.getMaxNumMeteringAreas() > 0) { List<Camera.Area> meteringAreas = new ArrayList<Camera.Area>(); meteringAreas.add(new Camera.Area(meteringRect, 600)); parameters.setMeteringAreas(meteringAreas); } mCamera.cancelAutoFocus(); mCamera.setParameters(parameters); mCamera.autoFocus(this); } 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4106966.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android -- 在ScrollView中嵌套ListView

在做一个工程,这个工程的布局可以相当的复杂,最外面是ScrollView,在ScrollView里面有两个Listview,这下好了,布局出来了,放在机子上跑,卡得想死有木有,信息乱跑乱出现,表示非常头疼。 在网上百度之后,发现有人解决了这个问题,便把这个解决方案转载过来分享一下。 它的思路就是在设置完ListView的Adapter后,根据ListView的子项目重新计算ListView的高度,然后把高度再作为LayoutParams设置给ListView,这样它的高度就正确了。 public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } } 只要在设置ListView的Adapter后调用此静态方法即可让ListView正确的显示在其父ListView的ListItem中。但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。 在ScrollView中嵌套ListView(或者ScrollView)的另外一个问题就是,子ScrollView中无法滑动的(如果它没有显示完全的话),因为滑动事件会被父ScrollView吃掉,如果想要让子ScrollView也可以滑动,只能强行截取滑动事件,有牛人在论坛中发过代码说可以。虽然我没有亲自试过,但估计是可行的。 虽然在ScrollView中显示ScrollView在技术上的难题可以攻破,但是这样的设计却是非常差的用户体验因为用户会不容易看到和操作子ScrollView中的内容。比如好的设计是,父ListView的每个Item只显示概括性的描述,然后点击其Item会进入另外一个页面来详细描述和展示以及对这个Item的操作。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3766414.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android内核剖析读书笔记

第16章 程序包管理 PackageManagerService類 PmS 目錄 16.1 包管理概述 16.2 packages.xml文件格式 16.3 包管理服務的啟動過程 16.4 應用程序的安裝和卸載 16.5 intent匹配框架 16.1 包管理概述 1.包管理服務的程序結構 分別為應用程序層,PmS服務層,及數據文件層 應用程序層 DontextImpl.ApplicationPackageManager Pms服務層 /data/system/packages.xml 所有应用程序与包管理相关信息 /system/etc/permisions/xxx.xml 加载系统feature,并为核心系统进程分配默认权限 PackageManagerService DefaultContainerService : 把安裝程序複製到程序目錄中。 Installer: 實際上是一個Socket客戶端。 程序文件層 /system/app 系统自带应用程序路径 /data/app 第三方应用程序层 /data/dalvik-cache/dex文件输出路径 /system/framework/*.apk;*.jar framework中的程序 /data/secure 加密文件 /data/drm/ drm用户专有目录 /data/app-private/drm用户专有目录 /data/data/ 普通程序数据 16.2 packages.xml文件格式 保存在 /data/system目錄下,裏面有很多標籤,如last-platform-version, permission-trees等。 16.3 包管理服務的啟動過程 包管理服務的啟動過程實際上市讀取XML文件中的信息,并把這些信息存放到相關的類成員變量中。 1.創建PmS。Settings對象 2.mSettings.addShareduserLP() 添加四個共享id。 3.創建一個Installer對象,該對象將輔助程序的安裝。 4.給幾個數據文件賦值。如mAppDataDir,mSecureAppDataDir,mDrmAppPrivateInstallDir。 5.調用readPermission函數。 6.調用沒Setting對象的readLP函數,讀取應用程序和包管理相關信息。 7.對java系統中的庫進行dex提取。 8為三個程序目錄創建一個FileObserver。FileObserver对象内部会检测目录中的添加、删除事件。這三個目錄是 /system/frameworks: 该目录保存了framework內核相關程序 /system/app:系统程序 /verdor/app:第三方程序,一般指厂商开发的自定义程序。 9 调用scanDirLI()掃描(解析程序中的Androidmanifest.xml)以上三個目錄中的所有程序文件,并將掃描結果放到PmS中的mPackages變量中。 10 刪除已經不存在程序對應的數據記錄。 11 清除沒有安裝成功的數據記錄。 12 為一下兩個第三方程序目錄添加FileObserver,并調用scanDirLI()解析目錄下所有的應用程序。 這連個目錄如下。 /data/app: 普通應用程序目錄。 /data/app-private: 該目錄沒錢并沒有被使用。 13 刪除/data/app目錄下以vmdl開頭及以.tmp结尾的文件。 14 如果系統版本升級,調用updatePermissionLP() 重新為應用程序賦予權限。 15 調用writeLP() 將mPackages中的數據重新寫入packages.xml文件中。 以上就是Pms啟動的主體功能。 16.4 應用程序的安裝和卸載 安裝和卸載應用程序都由PmS完成。安裝程序的過程包括在程序目錄下創建以包命名的程序文件、創建程序數據目錄,以及把程序相關的信息保存到相關的配置文件packages.xml文件中,卸載過程則是相反的操作。 16.5 intent匹配框架 intent匹配主要解決應用程序中沒有明確指定Component名稱的情況。 本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/p/3370227.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册