常用命令操作

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.得到屏幕的大小:

5.1

adb shell wm size

5.2

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相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理

9.查看内存信息

dumpsys meminfo cameraserver

10.

grep -nsr "***" .

11.binderDied异常死亡添加log

//Binder机制服务端的具体实现类
class BnXXX: public BnInterface<IXX>
{
public:
    virtual status_t    onTransact( uint32_t code,
                                    const Parcel& data,
                                    Parcel* reply,
                                    uint32_t flags = 0);
                                    
    //当Binder机制的客户端死掉,导致了该Binder结束,会回调此方法                                
    void FMRadio::binderDied(const wp<IBinder>& who) {
        //输出该Binder进程所在的信息 包括进程Id(pid)等
        LOGD("binderDied() 1 %p, tid %d, calling tid %d", who.unsafe_get(), gettid(),
                           IPCThreadState::self()->getCallingPid());        
        // do something 
    }
}  
12.

http://gityuan.com/2016/10/02/binder-died/

13.

  • pid分配上限的查询方式cat /proc/sys/kernel/pid_max,Android系统一般默认为32768。
  • 对于pid<300的情况值允许分配一次,不可再改变。也就是进程pid分配范围为(300, 32768);
  • 每个pid分配成功,便会把当前的pid设置到last_pid, 那么下次pid的分配便是从last_pid+1开始 往下查找。这就意味着当last_pid+1或者附近的进程,刚被杀并回收该pid,此时再创建新进程,很有可能会复用 pid.
  • 位图法记录已分配和未分配pid,由于pid的最大上限为32768,故pidmap采用4KB大小的内存,每一位代表一个进程ID号,正好4K*8=32K= 32768。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值