您的位置:首页 > 移动开发 > Android开发

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

2016-10-11 11:42 357 查看

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/

30,adb查看当前运行的activity:

adb shell dumpsys activity activities | grep "Run"


(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息