安卓中的安卓activity生命周期在哪个包中

14:24 提问
如何在不同的包中定义activity?
我把程序分割到几个不同的包中。一些类继承Activity,位于com.tmt.app。另外一个Activity在Dialogs包中。这两个包都位于src文件夹下面,在Manifest文件中我是这样指定包名的:
&manifest xmlns:android="/apk/res/android"
package="com.tmt.app"
android:versionCode="1"
android:versionName="1.0" &
这表明这个 manifest 与包 com.tmt.app 有关,相关的类如下:
android:name=".PasswordDialog"
android:theme="@style/AboutTheme"
android:screenOrientation="portrait" &
&/activity&
这表明 PasswordDialog 类在包 com.tmt.app 中。
如何把这个类放在Dialogs包中?
按赞数排序
你需要写出完整的包名+类名 ,假如你的类在 con.tmt.dialog包中,
android:name="com.tmt.dialog.PasswordDialog"
android:theme="@style/AboutTheme"
android:screenOrientation="portrait" &
com.tmt.app这是基础包 application包位置
需要dialogs包可以在com.tmt.app.dialogs
mainfiest中就可以这样写了
android:name=".dialogs.PasswordDialog"
android:theme="@style/AboutTheme"
android:screenOrientation="portrait" &
&/activity&
android:name="com.tmt.app.dialogs.PasswordDialog"
android:theme="@style/AboutTheme"
android:screenOrientation="portrait" &
&/activity&
其他相似问题> carlos的博客详情
使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法:
方法一:使用aapt & &//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name=’com.estrongs.android.pop’launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。
方法二:查看AndroidManifest.xml
1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:&manifest package=”com.estrongs.android.pop”&
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
&activity android:theme=”@*android & &tyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”&&intent-filter&&action android:name=”android.intent.action.MAIN” /&&category android:name=”android.intent.category.LAUNCHER” /&&/intent-filter&&/activity&
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
人打赏支持
码字总数 20680
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区查看:35093|回复:2
高级工程师
& && & 首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。
& && & 在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍一下MVC在Android开发中的应用:
& && & M(Model 模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。
& && & V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。
& && & C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。
& && & 好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。
& && & 介绍过Activity的主要作用后,那么我们就要详细说一下Activity了。
& && & 要想了解Activity,那么就必须要清楚Activity的生命周期,图片是最生动的,如下图:
Activity生命周期图
Activity 的生命周期是被以下的函数控制的。
public class Activity extends ApplicationContext {
& && &protected void onCreate(Bundle icicle);
& && &protected void onStart();
& && &protected void onRestart();
& && &protected void onResume();
& && &protected void onFreeze(Bundle outIcicle);
& && &protected void onPause();
& && &protected void onStop();
& && &protected void onDestroy();
onCreate(Bundle) 函数是你进行初始化的地方,这个也是执行
setContentView(View)函数的地方,setContentView(View)函数可以传入一个由XML
编制的UI界面,可以使UI和具体实现完全分离。
onPause()函数是处理用户离开当前 Activity 的地方。更重要的是,任何在当前
Activity中的任何改变都要在这个函数中提交。
Activity有四种状态:
& && & 活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就
处于activity或者运行状态。
& && & 运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity
处于文档处于焦点状态,当前的Activity就处于pause。
& && & 停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在
运行,但是用户却看不见。
& && & 结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这
是Activity就是处于结束状态了。
& && & 处于结束状态的是Activity,如果要使用户可见,只要重启才可以。
Activity的响应时间
& && & 当前Activity所在的线程为主线程,它的响应时间为5秒,如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。所以,这也是不建议在Activity中写太多复杂代码的原因之一。
& && & 当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),比如你想要获得android系统或者硬件一的些信息,就必须在Activity中写出来,如果单独写一个工具类获得不了。
多谢分享。
:lol 呵呵,很详细。
不错,学习了额Android 测试中获取包名、Activity 的方法总结
相信接触过 Android 自动化测试的同学都知道,很多场景下我们需要获取一个应用的包名和 Activity,例如 MonkeyRunner 的 startActivity 方法,需要一个传入一个component,加入是需要启动系统相机,我们传的就是com.android.camera/com.android.camera.Camera,这里可将Camera前面的包名省略掉,即写成:com.android.camera/.Camera。用在什么地方Monkey 命令monkey 命令的格式如下:adb shell monkey -p packageName &event-count&这里-p后面跟的参数就是应用的包名am 命令am命令可以启动一个应用(-n),使用-W选项可以获取到启动应用所消耗的时间,其命令格式为:am start -n packageName/ActivitypackageName/Activity应用的包名,Activity,这里的 Activity 是指可以作为 task 栈中的初始 activity,其实就是你进入应用后的第一个显示的主界面,am 命令并不能启动任意的 activityadb uninstall使用 uninstall 可以卸载 Android 用,但其后面跟的参数为应用的包名,非 apk 名自动化测试框架MonkeyrunnerstartActivity(),使用这个方法启动应用时需要packageName/Activity,实质同 am 命令Appium初始化配置的时候需要设置appPackage、appActivity,其实也是包名、Activity如何获取hierarchyviewer在 Android SDK 下面的 tools 目录,有一个叫hierarchyviewer的工具,使用这个工具可以查看设备上当前打开的应用的包名与 Activity缺点是只有在你的设备是开发机,view server开启的的情况下才能使用,比如小米手机的开发版本,模拟器aaptaapt这个工具在 SDK 的 build-tools 目录下面(如果没有,则是因为没有下载),使用下面的命令,可以从中获取到应用的包名与 Actiityaapt dump badging apk文件在显示出来的信息中,可以找到package: name和launchable-activity: name开发、反编译反编译 apk,从AndroidManifest.xml文件中查找,或者直接向开发获取该清单文件dumpsys 命令这是个人最推荐的方法,请先打开你要获取包名及 Activity 的应用dumpsys window[xuxu:~]$ adb shell dumpsys window w | grep // | grep name=mSurface=Surface(name=com.android.camera/com.android.camera.Camera)注意:windows 下请使将grep替换成findstrdumpsys activity[xuxu:~]$ adb shell dumpsys activity | grep mFocusedActivitymFocusedActivity: ActivityRecord{430fe770 u0 com.android.camera/.Camera t50}同样地注意不同系统替换 grep 和 findstr脚本获取最方便的方法git clone /gb112211/AndroidTestScripts.git或者下载zip包解压(需要Python环境及配置ANDROID_HOME)在 python 目录下直接双击运行get_current_activity.py,会在当前目录下生产一个CurrentActivity.txt的文本文件,里面会保存设备当前界面的包名及 Activity 名。end…
最新教程周点击榜
微信扫一扫博客访问: 651630
博文数量: 939
博客积分: 12411
博客等级: 上将
技术积分: 5762
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Android平台
原文地址: 作者:
&&&&&& 最近在做安卓系统开发板的调试的时候,想在里面运行一个3D性能测试程序,但是安装APK程序后,找不到启动图标。原来是被屏蔽了。只能通过adb接口来安装和启动第三方包,但是我们通过am,又不知道第三方包的包名和启动ACTIVITY名。之前没学过安卓编程,简单的在网上找了资料,在模拟器上进行解析类名和包名。代码附下
&&&&&&& public class MainActivity extends Activity {
&& &@Override
&& &protected void onCreate(Bundle savedInstanceState) {
&& &&& &super.onCreate(savedInstanceState);
&& &&& &setContentView(R.layout.activity_main);
&& &&& &String archiveFilePath="/123.apk";//待测的包
&&&&&&& PackageManager pm = getPackageManager();&& &
&&&&&&& PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);&& &
&&&&&&& if(info != null){&& &
&&&&&&&&&&& ApplicationInfo appInfo = info.applicationI&& &
&&&&&&&&&&& String appName = pm.getApplicationLabel(appInfo).toString();&& &
&&&&&&&&&&& String packageName = appInfo.packageN& //得到安装包名称 &
&&&&&&&&&&& String version=info.versionN //得到版本信息 &
&&&&&&&&&&& int i=0;
&&&&&&&&&& &
&&&&&&&&&&& TextView tv = (TextView)findViewById(R.id.textView1); //TEXT显示&
&&&&&&&&&& &
&&&&&&&&&&& tv.setText("packageName:"+packageName+" version:"+version+"::"+info.activities[0].name
&&&&&&&&&& &&& &&& &+"::");
&&&&&&&&&& &
&&&&&&&&&& &
&&&&&& 在编辑完代码后,我们要将123.apk放在模拟器的根目录下面,(模拟器下次重启就没了),首先执行adb shell mount -o rw,remount rootfs,重挂根目录为可读写。然后执行adb push 123.apk /。
&&&&&& 接下来启动我们的MAINACTIVITY,就可以看到打印出来的包和类名。截图如下
&&&&&& 接下来在adb shell 里面执行am 命令即可启动测试程序,希望和我一样的菜鸟,能通过这个傻瓜教程找到第三方包和类名。
阅读(584) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 安卓activity生命周期 的文章

 

随机推荐