Android 学习笔记-知识点(二)

  • 以下的一些是知识点是平时在开发的过程中遇到的一些知识点,总结起来,目的是提高自己的水平,由于本人开发时间不长,有些知识点可能过于的简单,但是好记性不如烂笔头,如果有错误的地方请指正,谢谢。

EditText设置打开的时候默认的输入状态
默认中文打开输入中文状态和英文输入状态

《Android 学习笔记-知识点(二)》 EditText.png

在代码中,inputtype的属性必须设置在singleline的后面

/**
 * 打卡软键盘
 *
 * @param mEditText 输入框
 * @param mContext  上下文
 */
public static void openKeybord(EditText mEditText, Context mContext) {
    InputMethodManager imm = (InputMethodManager) mContext
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
            InputMethodManager.HIDE_IMPLICIT_ONLY);
}

/**
 * 关闭软键盘
 *
 * @param activity
 */
public static void closeKeybord(Activity activity) {
    final View v = activity.getWindow().peekDecorView();
    if (v != null && v.getWindowToken() != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
}

监听输入法的内容变化是edittext.addTextChangedListener
监听输入法的回车按钮是edittext.setOnKeyListener,判断的条件为
其中keycode可以是软键盘上的任何键
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
            //点击回车时并弹起
            return true;
        }
        return false;
    }
});

《Android 学习笔记-知识点(二)》 Context实例.png
《Android 学习笔记-知识点(二)》 Activity之间传递数据的几种方式.png

关于VIew id的问题

《Android 学习笔记-知识点(二)》 view id.png

这两个方法的实现可参考,并且要保存状态的View要有唯一的id而且在View初始化的 
时候要调用setSaveEnabled(true);才能在New view 创建一个实例的时候调用            
onSavedStateInstance 的方法

《Android 学习笔记-知识点(二)》 Paste_Image.png

如何判断Activity是销毁的
If(acitivity== null||activity.isDestroyed()||activity.isFinishing()){
//google工程师判断Activity是否是销毁的多了一个ondestroyed的判断
}
Service的onCreate是在主线程中调用的,耗时操作会阻塞UI,处理方法有多种,可以使用线程,handler,intentService
android:animateLayoutChanges="true"
在父View设置这样一个属性,子View 设置Gone和Visible会有一个动画效果
在RecyclerView和ListView中设置android:clipToPadding可以只设置第一项距离项端的距离
即android:clicpToPadding = “false” android:paddingTop = “10dp”
ArgbEvaluate用于计算不同颜色之间的插值,有一个平滑的过度过程 
Android 可能由于服务器问题闪退,三闪闪退以上可能是由于数据已经被存放起来,需要将数据清除掉
 去除系统闪退的弹出框,其中UnCaughExceptionHandler中不能打开一个新的线程,诸如错误上报的问题
上传服务器的问题只能采用同步的方式,但是效果可能会比较的慢,但是可以将错误的信息保存到Sp中

《Android 学习笔记-知识点(二)》 UnCaughExceptionHandler.png

EditTex的setSelection是设置edittext光标的位置
RandomAccessFile使用这个类可以在指定的位置添加一些内容。
我们需要谨记的原则就是:不要在任何非UI线程里面去持有UI对象的引用。
Runtime.getRuntime().availableProcesser()方法并不可靠,他返回的值并不是真实的CPU核心数,因为CPU
会在某些情况下选择对部分核心进行睡眠处理,在这种情况下,返回的数量就只能是激活的CPU核心数。

《Android 学习笔记-知识点(二)》 BroadCast和localBroadManager的区别.png
《Android 学习笔记-知识点(二)》 线程优先级.png

可以为线程设置优先级

《Android 学习笔记-知识点(二)》 设置优先级.png
《Android 学习笔记-知识点(二)》 有必要去看一下的Android 源码.png

多渠道打包
就是发布到不同渠道的包,比如你看很多小米商店下载的app,启动页会有小米商城的logo。
Java8 ::用来引用的是构造方法和静态的方法

《Android 学习笔记-知识点(二)》 Java8的Effectively final 特性.png

按键或触摸事件5s,广播处理10秒,服务20秒可能会出现anr
Manifest中设置了screenOrientation在Activity中设置onConfituration的方法不会被调用
限制输入的时候可以使用注解的方式,用枚举的本质还是创建对象

《Android 学习笔记-知识点(二)》 作用注解的方式来代替枚举.png
《Android 学习笔记-知识点(二)》 Application注意事项.png

画笔设置设置阴影
paint.setShadowLayer(4, 2, 2, 0x80000000);
***

Handler.post(r) 实现是工作在ui线程,这只是执行了runnable里面的run方法,并没有执行start的方法。

《Android 学习笔记-知识点(二)》 Handler.png
《Android 学习笔记-知识点(二)》 HandlerThread.png
《Android 学习笔记-知识点(二)》 IntentService.png

手机的开发者选项里面的(窗口动画绽放,过渡动画缩放,动画程序时长缩放)分别对应以下的三个动画绽放
"Window animation scale",作用于非Activity窗口。比如,Dialog、toast、自定义浮窗、输入法等窗口都是该选项的作用目标
"Transition animation scale",作用于Activity窗口。Activity窗口是该选项作用目标
"Animator duration scale",作用于View。比如View属性动画、水波纹背景动画等
如果包名相同的情况下,可以采用这种方式来写

《Android 学习笔记-知识点(二)》 SupportLiVersion.png

 ViewStub的使用方法
<ViewStub
    android:id="@+id/vsHeader"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inflatedId="@+id/header"
    android:layout="@layout/header" />

其中inflatedId是在获取到ViewStub中实际View的id
    stub = (ViewStub) findViewById(R.id.vsHeader);
    View inflated = stub.inflate();
    View view = inflated.findViewById(R.id.header);
    inflated = view //true
    所以拿inflated.findViewById()和view.findViewById()的结果是一样的
代码中也可以这种方式添加
    ViewStub stub = new ViewStub(this);
    stub.setLayoutResource(R.layout.header);
    stub.inflate(); 
  把底部的EditText弹出在软键盘的上方
<activity android:windowSoftInputMode="adjustPan">
不能在application中做一些缓存数据的操作,如果当前app从后能切到前台的过程这前,系统可能会对application中的数据做一些清理的工作,导置在切到前台的过程中导致应用程序崩溃。

Android 数据库升级的过程中会将数据库中的数据信息清除掉,升级过后能会导置应用程序崩溃,解决的办法是升级的时候做数据的保存,在拷贝数据到高的版本中

    原文作者:zgsHighwin
    原文地址: https://www.jianshu.com/p/37d80789b25f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞