android 编程实战 学习 之一

本文是概略+细碎知识点   属于粗读 泛读。


ArrayList 不要使用增强型for循环
LinkedBlockingQueue<String>blockingQueue = new LinkedBlockingQueue<String>();
生产者/消费者模式  上面一行代码 就能够提供 阻塞队列 以及可以提供额外的线程安全操作
更智能的锁 当需要区分 读数据 和 写数据时 , synchronized 关键字没有Lock 高效
ReentrantReadWriteLock mLock  = new ReentrantReadWriteLock();
ReentrantReadWriteLock.WriteLock writeLock  = mLock.writeLock();
try {
writeLock.lock();
mName = name;
} finally {
writeLock.unlock();
}
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
AsyncTask 是一个轻量级的类 该类的问题就是  实例只能执行一次,意味着每一次的执行操作 都需要 new 一个新的实例。
不适合那些频繁的操作,因为那样会快速聚集需要垃圾回收的对象,并最终导致程序界面卡顿。
AsyncTask 不能对操作设置执行时间 也无法间隔一段时间执行操作 它适合文本下载,以及不会频繁发生或通过用户交互等类似情况的操作。


http://developer.android.com/training/best-performance.html


These classes and articles help you build an app that's smooth, responsive, and uses as little battery as possible.
1、Managing Your App's Memory


暂时搁置  特么 读英文文档太吃力 


继续下一章 
组件 清单  资源 
提倡 基本任何 不涉及用户界面操作 都应该使用 service 。建议每个任务都对应一个service 。使用多个service 比使用 一个service 来处理所有的操作会 更简单
通常不需要 ContentProvider 来存储数据 但是 如果要存储的应用程序数据 很适合 SQL ,通常 会很容易实现 ContentProvider ,即使 开发者 不想跟 其他应用程序来共享数据 。
使用AdapterView(列表或网格) 显示数据时 ContentProvider 会特别有用,因为Loader API  提供了 从 ContentProvider 加载数据的现成实现。


Manifest http://developer.android.com/guide/topics/manifest/manifest-intro.html
清单文件 非常非常重要 小失误会酿成大麻烦 是核心文件 这里定义了太多的配置信息 和 声明 还好android lint工具会对其进行检查。
根节点元素  manifest  package 不用说 。 sharedUserId /sharedUserLabel(Linux 用户ID 和 名称 ) 默认系统分配 (应用场景 : 免费版本---》付费版本)
 两个app 设置了相同的值时,开发者可以 访问相同的数据 甚至能共享 这些应用的进程。
 installLocation : auto 应用程序安装的位置 。自动选择 、内部存储区(data 分区) 外部sdcard
 versionCode /versionName 版本号/名称 其中版本名称会呈现给用户。
 
 googleplay 过滤器和权限。
 Declared <uses-feature> elements are informational only,
 meaning that the Android system itself does not check for matching feature support on the device before installing an application. 
 However, other services (such as Google Play) or applications may check your application's <uses-feature> declarations as part of handling or interacting with your application.
 <uses-feature ----- /> 这个权限是 为 GoogelPlay 用来过滤 这个应用 哪些设备会可见。只支持 WI-FI的平板电脑 但不支持 电话短信 。不支持多点触控的部分android电视
 <supports-screens -------/> 
 <supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>
 
 android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
<application>节点下 backupAgent = “.MyBackupAgent” (应用场景 : 用户希望更换手机时 数据可以备份 迁移到新设备 )Google 提供了 备份服务
在清单文件中 backupAgent 指向 实现备份代理功能的类即可。


所有的组件默认都是启用的。设置 android:enabled = "false" 可以修改默认行为。这将阻止组件接受Intent。(应用场景:在用户完成特定配置步骤前 禁用应用程序的部分功能  可代码设置)
PackageManager packageManager = getPackageManager();
packageManager.setComponentEnabledSetting(new ComponentName(this, xx.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
packageManager.setComponentEnabledSetting(new ComponentName(this,xx.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, PackageManager.DONT_KILL_APP);
 开发者不想把组件暴露给系统其他部分(出于安全原因) 可以设置 android:exported = false;
 开发者想设置一个组件供其他应用程序使用 同时又想提供某个安全级别 则可以自定义权限 。
 
 Intent 过滤
 隐式Intent 取决于三个因素:action、数据(data)的URI和类型(MIME)、类别(category)
 data 包含 URI 和 MIME (打开只包含特定类型的文件时非常有用)
  
 String.xml 
 <string name = "str_merger"> welcome %s </string>  ----> getString(R.sring.str_merger,"ayuan")
 <string-array name = "str_arr">
 <item>xiaoming</item>
 <item>xiaohong</item>
 <item>xiaosen</item>
 <item>qiyuanyuan</item>
 </string-array>
 ----------------->String[] strs = getResources().getStringArray(R.array.str_arr);


 assets的出现原因
 android2.3之前 资源文件的最大限制为 1 M 如果使用的资源比较大 会有问题 ,assets目录中就可以存放任意文件。现在这种限制已不复存在,可以安全的在 raw 资源目录里存储任意文件。
 然而,由于assets目录支持子文件夹,在某些情况下 ,开发者仍然要可能使用assets


AssetManager assetManager = getAssets();
String[] files = assetManager.list("childDirName");/(getLocals())
AssetFileDescriptor fileDescriptor = assetManager.openFd("childDirName/"+files[0]);
//TODO 对 fileDescriptor 执行读写操作
//------
fileDescriptor.close();
用户体验和界面设计


尺寸和大小
1dp 约等于 160dpi 屏幕上的一个真实像素。
推荐尺寸 android 的按钮最好是多大   48dp 至少是大于 48dp 最好将其大小设计为  48 的倍数  以方便手指在触摸屏上轻松交互
图标大小  MDPI(基准) HDPI XHDPI XXHDPI  48像素 72 96 144  这就是 所谓的  2;3;4;6
如果将位图作为android图标的话 应该使用dp而不是像素作为View的单位。 一个正常的图标  例如 主屏幕的启动图标 应该是  48x48dp 操作栏(actionbar的图标应为 32x32dp
通知栏的图标 为24x24dp 更小的图标 16x16dp 尽量不要设计小于 16的图标。 
字体的大小 google 为 android 字体 定义四种标准大小 :极小 micro 12sp ; 小 small 14sp ; 中 medium 18sp ; 大 large 22sp
Android Design (developer.android.com/design/style/iconography.html)提供了大量的免费图标





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值