Android 浏览器的研究(六)--- ADT调试通过Intent启动的Activity

   今天遇到一个问题,在音乐应用里长按一个歌曲,在弹出菜单中选择搜索,在搜索选择框中选择浏览器。正常情况下应该打开浏览器并且使用默认的搜索引擎启动搜索,但是现在浏览器搜索界面并没有打开。首先想到的是打开浏览器工程,在相关位置设置断点,启动调试,发现一切处理正常,浏览器界面打开并正常启动了搜索过程。原来问题只发生在浏览器进程尚未启动,音乐应用使用Intent启动浏览器来进行搜索的情况下。这里分享一下这种情况下如何启动调试分析。

   首先,该应用是其他应用通过Intent启动的,而我们需要调试它。在C/C++的程序调试的时候,遇到这种情况我们一般将调试器是attach到给定的进程号上实现调试的,实际上ADT也是支持这种场景的:打开浏览器APK工程,打开DDMSPerspective, 如果当前浏览器已经运行,在Devices视图里点击你的应用,这个时候Devices视图里的绿色的小虫子按钮就会变成Active 状态,点击它就可以Attach 到该进程进行调试,如图:

Android 浏览器的研究(六)--- ADT调试通过Intent启动的Activity

其次,你的应用可能在启动后很快结束,你还没来得及Attach到它(在attach到它之前你的断点不起作用)。你需要你的应用等你一下,让你来得及attach到它。最简单的办法就是在你的断点前Sleep一下,或者使用其它合适的同步方案(传统应用里我们通常是通过读一个键盘输入来同步)。