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

934 阅读3分钟

一、 前言

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

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

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

am命令
am命令

二、什么是am命令

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

  • 拨打电话10086
     adb shell am start -a android.intent.action.CALL -d tel:10086
  • 打开网站blog.csdn.net/androidstar…

    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
    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 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。

更多参考阅读:

blog.csdn.net/u010164190/…

关于更多

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

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

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

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

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

技术+职场
技术+职场