1.日期格式转换:
date -d '1970-01-01 UTC 1514783294 seconds' +"%Y-%m-%d %T %z"
2.so转换成代码行数:
addr2line -C -e **.so -f 0001e91b
3.android studio 下载地址:
https://developer.android.google.cn/studio/
4.
AS升级后,发现原来的代码会生成报出一个:App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW的warning
解决办法:
在app的bulid.gradle 文件中增加下面几行代码来关闭检索的功能。
defaultConfig {
///////////。。。。。。。。。。。。。。。。///////
}
//xucancheng add line begin
lintOptions {
disable 'GoogleAppIndexingWarning'
baseline file("lint-baseline.xml")
}
//xucancheng add line end
重新编译后问题解决。
5.得到屏幕的大小:
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); Point point = new Point(); display.getRealSize(point);
point.x 和point.y便是屏幕实际的宽度和高度。
display.getWidth();//显示的宽度
display.getHeight();//显示的高度
6.常用log关键字:
1,亮灭屏DisplayManagerService: Display device changed state: "内置屏幕"
, OFF
DisplayManagerService: Display device changed state:
"内置屏幕"
, ON
2,powermanager接收到power键灭屏:
PowerManagerService: Going to sleep due to power button
3,windowmanager接收到全局按键
WindowManager: interceptKeyTq keycode=
26
interactive=
false
keyguardActive=
true
policyFlags=
2000000
WindowManager: interceptKeyTq keycode=
26
interactive=
false
keyguardActive=
true
policyFlags=
2000000
down =
true
// 按下
WindowManager: interceptKeyTq keycode=
26
interactive=
true
keyguardActive=
false
policyFlags=
22000000
WindowManager: interceptKeyTq keycode=
26
interactive=
true
keyguardActive=
false
policyFlags=
22000000
down =
false
// 松开
4.camera service
1,
既然Camera是利用binder通信,它肯定要将它的service注册到ServiceManager里面,
以备后续Client引用,那么这一步是在哪里进行的呢?细心的人会发现,
在frameworks\base\media\mediaserver\Main_MediaServer.cpp下有个main函数,
可以用来注册媒体服务。没错就是在这里,CameraService完成了服务的注册
Main_MediaServer主函数由init.rc在启动是调用,所以在设备开机的时候Camera就会注册一个服务,用作binder通信
2,camera 在servicemanager 完成服务注册,提供给client随时使用。
sp Camera::connect(int cameraId)
{
LOGV("connect");
sp c = new Camera();
const sp& cs = getCameraService();
if (cs != 0) {
c->mCamera = cs->connect(c, cameraId);
}
if (c->mCamera != 0) {
c->mCamera->asBinder()->linkToDeath(c);
c->mStatus = NO_ERROR;
} else {
c.clear();
}
return c;
}
通过getCameraService()函数获取一个Camera服务实例。
const sp& Camera::getCameraService()
{
if (mCameraService.get() == 0) {
sp sm = defaultServiceManager();
sp binder;
do {
binder = sm->getService(String16("media.camera"));
if (binder != 0)
break;
LOGW("CameraService not published, waiting...");
usleep(500000); // 0.5 s
} while(true);
mCameraService = interface_cast(binder);
}
LOGE_IF(mCameraService==0, "no CameraService!?");
return mCameraService;
}
这个调用用来得到一个名称为"media.camera" 的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型ICameraService使用
7.查看进程的方法
ps -A |grep camera
ps -ef|grep camera
ps -ef 是用标准的格式显示进程的、其格式如下
其中各列的内容意思如下
UID //用户ID、但输出的是用户名
PID //进程的ID
PPID //父进程ID
C //进程占用CPU的百分比
STIME //进程启动到现在的时间
TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD //命令的名称和参数
8.杀死进程
kill -Signal pid
默认参数下,kill 发送SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。
kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出。
TERM(或数字9)表示“无条件终止”;
因此 kill - 9 表示强制杀死该进程;与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理