
Activity启动加载模式有四种standard(默认) singleTop singleTask和 singleInstance。standard模式默认加载方法即使某个Activity在 Task栈中已经存在另一个activity通过Intent跳转到该activity同样会新创建一个实例压入栈中。singleTopTop即StackTop栈内顶部复用。当该Activity位于栈顶的时候才会被复用否则和标准模式一样。顶部复用是为了保持栈内完整顺序。singleTaskTask即任务栈TaskStack栈内单例复用。它总会被复用并且栈内其上面的其它activity都会被弹出销毁。栈内复用只保持栈内目标activity之下的顺序。singleInstance将Activity压入单独的任务栈中不和其它Activity处在同一个任务栈中。用于在系统中单例且需要跨应用调用。例如Task栈1的情况为A B C。C通过Intent跳转到D而D的Launch mode为singleInstance则将会新建一个Task栈2。此时Task栈1的情况还是为A B C。Task栈2的情况为D。此时屏幕界面显示D的内容如果这时D又通过Intent跳转到D则Task栈2中也不会新建一个D的实例所以两个栈的情况也不会变化。而如果D跳转到C则栈1的情况变成了A B C C因为C的Launch mode为standard此时如果再按返回键则栈1变成A B C。也就是说现在界面还显示C的内容不是D。好了现在有一个问题就是这时这种情况下如果用户点击了Home键则再也回不到D的即时界面了。如果想解决这个问题可以为D在Manifest.xml文件中的声明加上intent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter加上这段之后也就是说该程序中有两个这种声明另一个就是那个正常的根 activity在打成apk包安装之后在程序列表中能看到两个图标但是如果都运行的话在任务管理器中其实也只有一个。上面的情况点击D的那个图标就能回到它的即时界面比如一个EditText以前输入的内容现在回到之后依然存在。标准的四种启动模式是在mainfest的xml文件中进行配置Android中还提供了通过Intent.setFlags(int flags)设置启动模式FLAG_ACTIVITY_SINGLE_TOP: 等同于mainfest中配置的singleTopFLAG_ACTIVITY_CLEAR_TOP : 等同于mainfest中配置的singleTaskFLAG_ACTIVITY_REORDER_TO_FRONT调整位置到栈顶不销毁其它acitvity激活已经运行的Activity而不是启动新的AcivityIntent inew Intent(this,Activity1.class);i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);startActivity(i);如果Activity在堆栈中将会运行它的onStart,、onResume函数而不会运行onCreate函数。这样Activity最后运行的状态就能够保存。onConfigurationChanged(Configuration)当横竖屏切换、语言切换等发生时会导致生命周期重置这在游戏设计中是不能被理解的。在Manifest文件中的对应Activity的configChanges中设置了要处理的系统配置变更类型时当系统的配置信息发生变化时该方法会被调用。如果发生变更的配置与configChanges中设置的属性不匹配onConfigurationChanged方法便不会被调用而是Activity会被销毁并使用新的配置重建。比如屏幕旋转前已经在configChanges中配置了 configChanges orientation|screenSize那么Activity不会被重建而是调用onConfigurationChanged方法然后可以在onConfigurationChanged方法内处理屏幕方向变动适配。在变更系统语言前为Activity配置了android:configChangeslocale|layoutDirectionActivity不会被重建而是调用onConfigurationChanged方法然后可以在onConfigurationChanged方法内处理语言变动适配。Activity的继承关系android.app.activity - androidx.core.app.ComponentActivity - androidx.activity.ComponentActivity - androidx.fragment.app.FragmentActivity - androidx.appcompat.app.AppCompatActivity1.Activty A B间切换生命周期的7个方法执行A.startAvtivity(B),A.finish() 代码响应执行顺序:A.onPause(),B.onCreate(),B.onStart(),B.onResume(),A.onStop(),A.onDestroy().执行A.startAvtivity(B) 代码响应执行顺序:A.onPause(),B.onCreate(),B.onStart(),B.onResume(),A.onStop().执行B.setResult().B.finish()返回A 代码响应执行顺序:B.onPause(),A.onActivityResult(),A.onRestart(),A.onStart(),A.onResume(),B.onStop(),B.onDestroy().启动一个Activity A执行顺序A.onCreate(),B.onStart(),B.onResume().待机时A.onPause(),A.onStop(),A.onDestroy()...2. 一般来讲Activity就是一个可视的人机交互界面。每一个Activity都有一个默认的Window一般来讲这个Window都是全屏的。也有例外比如Dialog的Window就是非全屏的。Activity也可以利用默认Window以外的其它的Window比如弹出一个Dialog对话框。Window里可见的内容就是一层一层的View。Window里的View是通过setContentView这个接口set进去的这个ContentView就是Window里处于最根部的View。3. 让Dialog在弹出时背景的窗口呈现模糊的状态。Window wnddialog.getWindow();wnd.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);4. 机制参考 http://notfatboy.javaeye.com/blog/352803国内屏蔽了Android官方网站 http://developer.android.com/要查文档进网站 http://androidappdocs.appspot.com/index.html中文api: http://android.toolib.net/index.html在文档的Dev Guide标签项中的内容中查看AndroidManifest.xml中标签Activity之间切换的动画OverridePendingTransition5. 显式Intent通过指定Intent组件名称来实现一般用在程序内部。 应用程序中切换Activity时通常知道要启动的Activity具体是哪一个因此常用显式的Intent来实现。隐式Intent通过Intent Filter来实现的一般用在没有明确指出目标组件名称的前提下一般用于在不同应用程序之间。 需要AndroidManifest.xml中增加Activity的声明并设置对应的Intent Filter和Action才能被Android的应用程序框架所匹配。6.在devices面板中选中进程然后选中update heap然后就可以在heap面板中查看内存使用情况了。7.TabActivity中的菜单会和子Activity中的菜单组合在一块。8.默认按后退键时当前Activity会退出重写onBackPressed后就不退出了。Overridepublic void onBackPressed() {}9.Activity间传递的是对象而不是引用这是由于Activity是有生命周期的当这个acitivity destory掉后它里面的数据也就没有了。10.调用分享功能Activity a shareExtContext.getActivity();Intent intentnew Intent(Intent.ACTION_SEND);intent.setType(text/plain);//可更换为其它类型intent.putExtra(Intent.EXTRA_SUBJECT,内容标题);intent.putExtra(Intent.EXTRA_TEXT, 文本内容);a.startActivity(Intent.createChooser(intent, 分享的菜单的标题));分享多个附件http://hi.baidu.com/duxikuan/blog/item/2b6561de88f1c67494ee37b7.html点击分享菜单项的操作就由系统来处理了。http://www.donglongfei.com/2011/09/air-navitive-extension-android-example-share/http://www.ucrobotics.com/index.php/zh/forum/18-Android%E6%8A%80%E6%9C%AF%E6%8E%A2%E8%AE%A8/109-%E6%96%87%E4%BB%B6%E5%88%86%E4%BA%AB%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0http://blog.csdn.net/yiyaaixuexi/article/details/6337760http://www.android-study.com/wangluobiancheng/248.htmlAndroid开发 系统应用调用Intent使用总结 - 木子舟 - ITeye博客/data/data/包名/files/下的文件不可以通过蓝牙发送因为两个程序间不可以共享私有目录中的数据。http://www.eoeandroid.com/thread-99058-1-1.html10. http://www.cnblogs.com/feisky/archive/2011/12/26/1649081.htmlAndroid本地应用程序也使用Intent来启动Activity和子Activity_51CTO博客_intent activity应用Android本地应用程序也使用Intent来启动Activity和子Activity_51CTO博客_intent activity应用11. 非全屏Activity通过主题比如Theme.Dialog来实现非全屏Activity不过今天Android123告诉大家设置Activity不再全屏显示的原理。Android Theme也主要是通过定义Style来实现的实现的原理大家可以直接看Android Framework中的定义今天给一种更简单但相对灵活的方法比如不要Theme.Dialog中的边框下面就一起来看下自定义Activity大小的实现方法。1). 创建一个样式文件保存在res/values/styles.xml这里文件名不能随便修改。?xml version1.0 encodingutf-8?resourcesstyle nameTheme.Android123 parentandroid:style/Theme.Dialogitem nameandroid:windowBackgrounddrawable/bg/item/style/resources2). 上面定义的主题风格名称为Theme.Android123父风格从Theme.Dialog实现接着自定义了背景位置在drawable/bg中bg.xml的内容为?xml version1.0 encodingutf-8?shape xmlns:Androidhttp://schemas.android.com/apk/res/androidpadding android:left15dp android:top15dp android:right15dp android:bottom15dp /stroke android:width3dip color#000000 /corners android:radius5dp /solid android:color#ffffff //shape定义了一个shape对象用来实现背景drawable形状其中padding代表距离边框。stroke可以制造出一些3D立体效果corners是四个角radisu属性可以设置半径值越大越圆滑soild是填充颜色。3). 最后在androidmanifest.xml中在activity节点加一个 android:theme属性值为style/Theme.Android123。Android Toast 长期显示解决方案http://veright.blog.163.com/blog/static/28345389201072115940323/怎么在android的来电界面上自定义个Popup用它来给用户提供些信息而且是不可点击的用户可以继续听电话怎么做http://www.devdiv.com/Android-%E6%80%8E%E4%B9%88%E5%9C%A8android%E7%9A%84%E6%9D%A5%E7%94%B5%E7%95%8C%E9%9D%A2%E4%B8%8A%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%AAPopup%EF%BC%9F-thread-121437-1-1.html