文档章节

Android app开发常用知识列举

IamOkay
 IamOkay
发布于 2015/02/14 08:07
字数 1417
阅读 1944
收藏 25
点赞 0
评论 1
  1. 在Activity可见时进行页面刷新,即处于Activity栈顶,当然,这种刷新操作 可以在onStart,onResume,onRestart,onNewIntent+singleTask中,但最好的位置是onResume,其他方式可能会造成窗体泄露

  2. Service的两种启动方式,startService和bindService,根据启动方式的不同,当然也有一种称为复合方式startService+bindService,Service销毁的方式不同,startService可以做app退出后的后台服务,但bindService不行,startService+bindService也可以做后app退出后的后台服务,但app退出时必须unbind,反过来bindService+startService不能做app退出后的服务

  3. 建议在Activity增加一个变量activityIsActivity来判断当前Activity是否处于活动状态,Activity::onResume和Activity:onPause中改变其值,防止在无界面时发生窗体泄露问题。

  4. 在Activity的onWindowFocusChanged的方法中监听焦点的改变

  5. 使用InputMethodManager 退出键盘最灵活的方式是

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开
    if(isOpen)
    {
        imm.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);  
        //(WidgetSearchActivity是当前的Activity)
    }

    当然,如果页面只会有一个可以启动键盘的EditText,可直接将MainActivity.this.getCurrentFocus()替换成该空间

  6. dip转px的公式是 px = dip*scale+0.5f,scale是密度,当然,还可以使用  (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, context.getResources().getDisplayMetrics());

  7. 获取DisplayMetrics的方式有2种,getWindow.getWindowManager.getDisplayMetrics(DisplayMetric dm),还有一种是context.getResources().getDisplayMetrics(),后者使用比较灵活,建议使用后者

  8. 自定义权限+引用+使用自定义权限的方式是,自定义<permission android:name="自定义权限" android:protected="根据安全等级设置,如果保密性较高,使用签名方式" />,然后引用<use-permission android:name="自定义权限" />,使用自定义权限 如下

    <receiver android:name=".SmsBroadCastReceiver" android:export="false" android:permission="自定义权限">  
                <intent-filter android:priority="20">  
                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
                </intent-filter>  
            </receiver>
  9. android:export表示该组件是否被跨进程调用,默认是false,android:windowSoftInputMode表示设置 键盘弹出UI布局的改变 以及定义键盘弹出状态,何时弹出等行为

  10. android:noHistory表示该组件不会在(最近打开列表中)显示,android:configChanges表示当发生指定的改变时,Activity程序不会重新启动,响应的变化也会通过onConfigurationChanged中得到,android:screenOriention表示Activity应该处于何种屏幕状态,android:lancheMode是指定创建模式

  11. 强制检测跨进程调用的权限问题

    public boolean isEnable(){
    
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK,"you donot have the wake_lock permission");
        Log.d("pid="+Binder.getCallingPid()+",uid="+Binder.getCallingUid());
        return isEnableInternal();
    }


  12. <use-library>生命需要的连接共享库,<use-feature>生命app所需要的硬件环境支持,如支持蓝牙等,否则app将安装失败。

  13. android:clearTaskOnLaunch和android:finishOnTaskLauch的区别是,前者清楚自身以外的Activity,后者清除转入后台的Activity Task。后者比较常用。

  14. 系统会为每一个app分配一个虚拟机进程,因此不想jvm所有的应用共享同一个虚拟机进程

  15. 使用LocalBroadcastReceiver或者myView.getHandler进行消息队列方式的更新,自定义Handler时请以静态方式继承Handler,否则可能因为Handler持有的Activity无法销毁,因为Handler本身是持有静态对象,他的生命周期和app相同,因此为了让Activity及时销毁,必须静态继承 public static class MyHandler extends Handler

16.android:process="string",如过值为 :string 则必要时自动创建新进程,如果是 普通string 则会必要时加入全局的进程,因此建议使用前者

   <service 
            android:name="com.example.actiontabbar.RemoteService"
            android:exported="true"
            android:enabled="true"
            android:process=":remote"
            ></service>

效果如下

17.关于可滑动的ViewGroup滑到边界时出现阴影的消除方法

  android:overScrollMode="never"

18.Fragment中的onCreateView用于加载layout.,而onViewCreate用于初始化被onCreateView加载的layout

19.Manifest中一些属性的说明,相关补充参考 android Manifest.xml选项

android:excludeFromRecents="true"--->表示不在最近打开的列表中显示
android:singleUser="true"--->表示单用户,所有用户使用的Activity是同一个,和singletop,singletask的区别是,无论如何启动,他总是一个。
android:multiprocess=["true" | "false"] ---->指定是否允许多个app实例运行在不同进程上
android:permission=""   ---->外部其他程序调用该组件要使用的权限
android:noHistory=["true" | "false"] 是否需要移除这个activity当用户切换到其他屏幕时
android:exported=["true" | "false"]是否允许activity被其它程序调用
android:showOnLockScreen="" 是否显示在锁屏界面上面(qq有这功能,锁屏之后也能看见信息)
android:hardwareAccelerated=["true" | "false"] 是否硬件加速,此标志只是说明app可能需要该权限,但实际上开发中需要手动设置。
android:largeHeap=["true" | "false"] 是否允许最大堆
android:finishOnTaskLaunch=["true" | "false"]是否关闭已打开的activity当用户重新启动这个任务的时候

20.getWindow().getAttributes()返回的是Window.LayoutParams,可设置窗体效果

 private void setTranslucentStatus(boolean on) {
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        if (on) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }

21.View方法addOnLayoutChangeListener(listener)可用来监听View是否已经绘制完毕

22.关于内存优化add/remove,register/unregister,bind/unbind等方法必须等次出现,以防止内存泄露

23.BroadcastReceiver不能启动线程的原因是其生命周期相对短暂,而且不能执行耗时操作。

24.在Application中监听ActivityLifecycleCallbacks ,监听Activity的生命周期

 public interface ActivityLifecycleCallbacks {
        void onActivityCreated(Activity activity, Bundle savedInstanceState);
        void onActivityStarted(Activity activity);
        void onActivityResumed(Activity activity);
        void onActivityPaused(Activity activity);
        void onActivityStopped(Activity activity);
        void onActivitySaveInstanceState(Activity activity, Bundle outState);
        void onActivityDestroyed(Activity activity);
    }

25.使用android.os.Debug.dumpHprofData(path)生成app堆栈信息文件,检测OOM问题

26.FileObserver文件观察者,用于观察目录和文件的变化

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 187
博文 458
码字总数 369998
作品 0
海淀
程序员
加载中

评论(1)

Jashon
Jashon
总结的不错0
慕课分享:盘点2014年热门免费开发课程

这篇文章来自慕课网团队的分享,文章从前端开发、后端开发、移动开发和OS 四个方面,分享了2014年度的热门免费课程。 前端开发 《HTML+CSS基础课程》 这门课程从最基本的概念开始讲起,步步深...

2014/12/30
0
0
最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
0
1
Android 开发者,如何提升自己的职场竞争力?

前言 该文章是笔者参加 Android 巴士线下交流会成都站 的手写讲稿虚拟场景,所以大家将就看一下。 开始 大家好,我是刘世麟,首先感谢安卓巴士为我们创造了这次奇妙的相遇。现场的氛围也让我...

南尘2251
2017/08/18
0
0
Android学习进阶路线导航线路(Android源码分享)

前言:公司最近来了很多应届实习生,看着他们充满信心但略带稚气的脸庞上,想到了去年的自己,那是的我是不是也和 现在的他们一样呢?现在的我又改变了什么?公司的给这些实习生指定的相关培...

程序袁_绪龙
2014/10/22
0
2
《App架构师实践指南》:移动开发的进阶指南

文章主要内容: 什么是 app 架构师 这本书主要内容 读完感受 什么是 App 架构师 成为“架构师”是许多程序员的梦想,当然也包括我,在工作的几年里,我见过很多架构师,他们在设计某个大型系...

异步社区
05/29
0
0
0-2岁的app开发人员必读,Android开发APP前的准备事项

随着移动互联网的兴起,各行各业对移动应用的需求越来越大,从事APP开发的人也越来越多,APP开发行业可以说是方兴未艾。APP开发是比较复杂的事情,涉及产品、美工设计、服务器端开发、Andro...

传授知识的天使
06/06
0
0
Android 应用的动画实践--View Animation篇

前言 尝试搜索了一下android 动画的中文资料,很多都是一些枯燥的翻译api的一些文档,很少有系统讲解如何利用动画开发一个应用的资料,忽然,发现很多应用也不怎么注重动画在app的应用,想了...

打杂程序猿
2013/05/31
0
0
AndroidManifest.xml文件详解

更多原文,请见:http://mobile.51cto.com/aprogram-340646.htm AndroidManifest.xml文件是Android系统重要的权限申请和定义配置文件,程序员在开发时需要通过其来向系统预先定义和申请应用程...

samsunglinux
07/02
0
0
Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中,对AndroidUI做了初步的了解和学习,本篇继续进行Android开发学习的整理。And...

Realfighter
2015/03/04
0
0
我看完227篇文章,总结出一份Flutter入门教程

2018年6月21日,Google在GTMC大会上发布了 Flutter preview 1。这标志着 Flutter 发展已经进入到一个新阶段,即将迎来 1.0 的稳定版本。 本文致力于整理Flutter的入门的文章。作为自己学习 ...

掘金官方
07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

rabbitmq学习记录(六)交换机Exchange-direct

实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机...

人觉非常君
16分钟前
0
0
Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
25分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
41分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
今天
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
今天
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部