Android的各种零碎知识点(持续补充)

来源:互联网 发布:里海大学本科 知乎 编辑:程序博客网 时间:2024/06/10 00:24

1,将EditText的光标放在尾部:

editText.setSelection(editText.getText().length());

2,使用SparseArray<E>替换HashMap<Integer,E>可以提升查找效率。

3,通过logcat日志可以查看Activity的display time,日志样式如下:

I/ActivityManager: Displayed com.huawei.android.ui.PhoneFinderActivity: +2s152ms (total +22s66ms)

日志打印位置在com.android.server.am.ActivityRecord.reportLaunchTimeLocked(),具体代码如下:

private void reportLaunchTimeLocked(final long curTime) {    final ActivityStack stack = task.stack;    final long thisTime = curTime - displayStartTime;    final long totalTime = stack.mLaunchStartTime != 0            ? (curTime - stack.mLaunchStartTime) : thisTime;    if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) {        Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching", 0);        EventLog.writeEvent(EventLogTags.AM_ACTIVITY_LAUNCH_TIME,                userId, System.identityHashCode(this), shortComponentName,                thisTime, totalTime);        StringBuilder sb = service.mStringBuilder;        sb.setLength(0);        sb.append("Displayed ");        sb.append(shortComponentName);        sb.append(": ");        TimeUtils.formatDuration(thisTime, sb);        if (thisTime != totalTime) {            sb.append(" (total ");            TimeUtils.formatDuration(totalTime, sb);            sb.append(")");        }        Log.i(ActivityManagerService.TAG, sb.toString());    }    mStackSupervisor.reportActivityLaunchedLocked(false, this, thisTime, totalTime);    if (totalTime > 0) {        //service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime);    }    displayStartTime = 0;    stack.mLaunchStartTime = 0;}

“this time”包括actiivty启动时间和activity内容绘制时间;
“total time”包括“this time”和activity stack建立时间;
通常,“this time”和“total time”是相同的,只在两者不同时才会打印“total time”。

4,ipv4的正则表达式:

^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[09][0-9]|[1-9][0-9]|[0-9])$

5,在非Activity中调用startActivtiy()时,需要给Intent添加flag:

Intent.FLAG_ACTIVITY_NEW_TASK

6,在Activity中设置手机屏幕保持常亮状态:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

7,WebView加载本地文件:

webView.loadUrl("file:///android_asset/test.html");

8,TextView实现中文加粗效果:

textView.getPaint().setFakeBoldText(true);

9,TextView使用自定义字体:

Typeface tf=Typeface.createFromAsset(getAssets(),"fonts/***.TTF");textView.setTypeface(tf);

10,EditText默认弹出数字键盘,但是允许输入字母等特定字符:

<EditText    android:digits="0123456789abcdefghijklmnopqrstuvwxyz./?<>"    android:inputType="number"/>

11,android app的包名应遵循“DNS反转”约定,以保证包名唯一性。

12,Activity全屏设置:

12.1 AndroidManifest.xml中为Activity添加如下属性:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

12.2 Activity代码中设置:

requestWindowFeature(Window.FEATURE_NO_TITLE);int flags = WindowManager.LayoutParams.FLAG_FULLSCREEN;int mask = WindowManager.LayoutParams.FLAG_FULLSCREEN;getWindow().setFlags(flags, mask);// 注意:以上代码要写在setContentView()之前。

13,TextView增加删除线:

textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

14,TextView设置ColorSelector:

Context ctx = textView.getContext();ColorStateList colorStateList = ctx.getResources().getColorStateList(R.color.***_selector);textView.setTextColor(colorStateList);

15,在代码中设置View的background属性之后padding属性会失效,需要重新设置

16,缺少*.so文件,会导致调用错误java.lang.ExceptionInInitializerError

17,Eclipse中出现“ADB server didn’t ACK”错误解决方案:

1)关闭Eclipse
2)通过命令行进入 Android SDK tools目录
3)执行adb kill-server命令
4)执行adb start-server
5)如果启动ADB server时没有出错信息,则adb启动成功
6)重启Eclipse

18,将jar包转成dex格式:

dx --dex --output=out_name.jar origin.jar

19,查看app内存使用情况:

adb shell dumpsys meminfo -a [package_name]

20,android app数据备份与恢复:

adb backup -f [backup_file_name] -noapk [package_name]adb restore [backup_file_name]

21,设置音量:

public void setVolume(float scale) {    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);    audioManager.setMode(AudioManager.STREAM_MUSIC);    int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    audioManager            .setStreamVolume(AudioManager.STREAM_MUSIC, (int) (maxVolume * scale), AudioManager.FLAG_PLAY_SOUND);}

22,获取Android app流量消耗数据:

1)进入手机根目录:adb shell
2)获取app_id:cat data/system/packages.list | grep “pkg_name”(pkg_name为app包名)
3)获取上行流量:cat proc/uid_stat/app_id/tcp_snd(app_id通过第2步获取,流量单位是byte)
4)获取下行流量:cat proc/uid_stat/app_id/tcp_rcv(app_id通过第2步获取,流量单位是byte)

23,动态改变dialog尺寸:

//在dialog.show()之后调用public static void setDialogWindowAttr(Dialog dlg){        WindowManager.LayoutParams lp = dlg.getWindow().getAttributes();        lp.gravity = Gravity.CENTER;        lp.width = LayoutParams.MATH_PARENT;//宽高可设置具体大小        lp.height = LayoutParams.MATH_PARENT;        dlg.getWindow().setAttributes(lp);    }

24,Eclipse设置单行代码宽度:

Preferences—Java—Code Style—Formatter—Edit…—Line Wrapping—General Settings—Maximum line width

25,查看keystore文件:

keytool -list -v -keystore <keystore_file>

26,查看已安装apk包名:

adb shell pm list package

27,gradle配置中denpencies的类库的存放目录:

.gradle/caches/modules-2/files-2.1

28,查看gradle最新版本:

https://gradle.org/releases
http://services.gradle.org/distributions/

29,查看as的gradle插件最新版本:

https://jcenter.bintray.com/com/android/tools/build/gradle/
ps:gradle插件存储目录:/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle/


(未完待续)

0 0