学习FFmpeg必备,那些不容错过的Am命令解析

一、 前言

由于最近要学习FFMpeg,不得不去了解一个枯燥无味的AM命令了。但是am命令真的就这么无趣吗?——非也。

在Android中,除了从界面上启动程序之外,还可以从命令行启动程序。

相信大家对adb命令非常的熟悉。命令窗口通过adb shell 进入android 的Linux命令界面,输入am -help看到如下信息:

am命令

二、什么是am命令

使用的是命令行工具am.
am全称activitymanager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。

  • 拨打电话10086

    adb shell am start -a android.intent.action.CALL -d tel:10086
  • 打开网站http://blog.csdn.net/androidstarjack

    adb shell am start -a android.intent.action.VIEW -d  http://blog.csdn.net/androidstarjack
  • 启动activity

    am start -n com.uyyahao.app/.MainActivity -es website gityuan.com

    am命令启动activity

    三、主要是启动Activity命令

    am start [options] 使用options参数,接下来列举Activity命令的[options]参数:

  • D: 允许调试功能
  • W: 等待app启动完成
    -R : 重复启动Activity COUNT次
  • S: 启动activity之前,先调用forceStopPackage()方法强制停止app.
    – opengl-trace: 运行获取OpenGL函数的trace
    – user | current: 指定用户来运行App,默认为当前用户。
    – start-profiler : 启动profiler,并将结果发送到 ;
  • P : 类似 –start-profiler,不同的是当app进入idle状态,则停止profiling
    – sampling INTERVAL: 设置profiler 取样时间间隔,单位ms;

    *启动Activity的实现原理*

    存在-W参数则调用startActivityAndWait()方法来运行,否则startActivityAsUser()。
    
  • 打开音乐播放器:

    am start -a android.intent.action.MUSIC_PLAYER       
  • 启动一个服务:

    com.android.music/com.android.music.MediaPlaybackService (这里-n表示组件)

    或者

    am startservice -a com.smz.myservice (这里-a表示动作,就是你在Androidmanifest里定义的)
  • 发送一个广播:

    am broadcast -a <广播动作>
    
    例如: am broadcast -a com.smz.mybroadcast    

四、Am的相关参数

  • a : 指定Intent action, 实现原理Intent.setAction();
  • n : 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent();
  • d : 指定Intent data URI
  • t : 指定Intent MIME Type
  • c [-c ] …]:指定Intent category,实现原理Intent.addCategory()
  • p : 指定包名,实现原理Intent.setPackage();
  • f : 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型;
五、am命令实的实现方式
  • am命令实的实现方式在Am.java,最终几乎都是调用ActivityManagerService相应的方法来完成的,am monitor除外。

  • 比如前面概述中介绍的命令am start -a android.intent.action.VIEW -d http://gityuan.com, 启动Acitivty最终调用的是ActivityManagerService类的startActivityAsUser()方法来完成的。

  • 再比如am kill-all命令,最终的实现工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。

收紧内存

  • 命令

    am send-trim-memory  <pid> <level>

    例如: 向pid=12345的进程,发出level=RUNNING_LOW的收紧内存命令

    am send-trim-memory 12345 RUNNING_LOW。

    那么level取值范围为:

  • HIDDEN、
    • RUNNING_MODERATE、
  • BACKGROUND、
  • RUNNING_LOW、
  • MODERATE、
  • RUNNING_CRITICAL、
  • COMPLETE。

更多参考阅读:

http://blog.csdn.net/u010164190/article/details/51384099

关于更多

2017上半年技术文章集合—184篇文章分类汇总

高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画

一个实现录音和播放的小案例

NDK项目实战—高仿360手机助手之卸载监听

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809
微信公众号:终端研发部

技术+职场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

androidstarjack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值