Android开发过程中的问题及总结

来源:互联网 发布:淘宝网买手机壳 编辑:程序博客网 时间:2024/05/01 23:54


1、实现service常驻内存(和微信一样,使用资源清理,进程永远杀不死)。


2、application什么时候会结束生命周期。

3、怎么实现Android多语言开发:配置不同的string文件夹

4、和html进行交互,怎么进行接口回调

5、Adapter实现分页功能

6、系统闹铃是关不掉的进程,但是自己定义一个闹铃这个进程在资源清理的时候会被杀死。

7、怎么查看APK的md5值

8、通过adb 传送文件:adb push 文件 /sdcard/

9、startService是异步操作吗,为什么activity和service运行在一个主线程中?

10、可以再Thread中开启service

11、ScrollView只能有一个子控件。

12、onTouchListener的onTouch方法优先级比onTouchEvent高,会先触发。看View中的源码。

13、怎么阻止Bitmap内存溢出?

14、判断android上是否有内存卡;a: 直接获取/mnt/sdcard/.可以直接访问系统的sd卡。

b:  boolean sdCardExist = Environment.getExternalStorageState().equals(Android.os.Environment.MEDIA_MOUNTED);   //判断sd卡是否存在 

15、contentprovider:不同程序之间进行数据交换的标准api。

a.开发一个ContentProvider,子类需要实现query、insert、update、delete等方法

b.在xml中注册这个类,并且指定android:authorities。

这几个方法不是给该应用本身调用的,而是提供其他应用来调用的。其他应用就是通过ContentResolver对应的uri的四个方法来完成的。

16、PendingIntent通过getActivity、getService、getBroadcastReceiver静态方法来获取,它通常会传给其他应用组件,从而由其他应用程序来执行PendingIntent所包装的Intent。

17、broadcast是系统级别的,有自己的进程。超过10s就会弹出ANR

18、a.触摸控件(View)首先执行dispatchTouchEvent方法。

b.在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行,下面会分析)。

c.如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。

d.如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。

e.如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。

f.当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action(比如当前的为down,后触发的action就是move、up等。)(也就是说dispatchTouchEvent返回true才会进行下一次action派发)。

19、WalkLock:一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机制。

20、键盘弹出View往上顶:android:windowSoftInputMode="adjustPan"制如果ListView的内容随着键盘弹出而往上推,对ListView设置属性:lvChat.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

协调与activity生命周期的关系

21、Activity直接影响它所包含的fragment的生命周期,所以对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。例如:当activity的onPause()方法被调用时,它所包含的所有的fragment们的onPause()方法都会被调用。

Fragment比activity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:

onAttach()

当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。

onCreateView()

当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

onActivityCreated()

当activity的onCreated()方法返回后调用此方法。

onDestroyView()

fragmentlayout被销毁时被调用。

onDetach()

fragment被从activity中删掉时被调用。

一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activityresumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

22、用jstack工具查看线程堆栈情况:

jstack pid :其中pid通过java virtualVM可以查看当前运行的java代码对应的pid号。

23、Dialog的hide和dismiss:

dialog在show方法之后,如果调用hide,该dialog只是隐藏了,但是isShowing返回true。

如果调用dismiss,是把dialog释放掉,此时isShowing返回false。
 

24、

android:descendantFocusability用法简析

    开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。

    这时候就可以使用descendantFocusability来解决啦,API描述如下:

android:descendantFocusability

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.

Must be one of the following constant values.

 

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

        beforeDescendants:viewgroup会优先其子类控件而获取到焦点

        afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

 

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。心得:遇到不会不懂的地方除了网上查询资料之外,也可以多多去尝试每种属性的作用,多阅读官方文档(我始终觉得还是读原文的比翻译的理解的会更好)。




0 0
原创粉丝点击