Activity
确保无论系统从哪个任务启动活动,都只会创建一个活动实例并将其添加到新任务堆栈的顶部,也就是说,该实例启动的其他活动将自动在另一个任务中运行。再次启动此活动的实例时,将重用现有任务和实例。将调用此实例的onNewIntent()方法,将Intent实例传递给此实例。与singleTask一样,系统中同时只有一个这样的活动实例。
<style name="roomRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingbar_full</item>
<item name="android:minHeight">24dip</item>
<item name="android:maxHeight">24dip</item>
</style>
按Home将上一个任务切换到后台
长按Home键显示最近执行的任务列表
单击启动器或主屏幕中的应用程序图标以打开新任务或将现有任务安排到前台
在单任务模式下启动活动时,系统将搜索是否已存在合适的任务。如果是,任务将被分派到前台以重用任务。如果任务中已存在要启动的活动的实例,请清除该实例上方的所有活动,并向用户显示该实例。如果现有任务中没有要启动的活动实例,请在任务顶部启动一个实例。如果任务不存在,将启动一个新任务,并在新任务中启动单一任务模式下的活动实例。
启动单个实例的活动时,它将在系统中搜索此活动的实例是否已存在。如果存在,它会将此实例的任务安排到前台,并重用此活动的实例(此任务中只有一个活动)。如果它不存在,它将打开一个新任务,并在此新任务中启动此singleInstance模式的活动实例。
进程解析:活动调用startActivity后,它最终调用attach方法,在PolicyManager中实现Ipolicy接口,然后实现Policy对象,然后调用makenewwindow(Context)方法,该方法返回PhoneWindow对象。PhoneWindow是Window的子类。在这个PhoneWindow中,有一个DecorView的内部类,它是所有应用程序窗口的根视图,直接控制是否显示活动(参考旧驱动程序的原始单词..)。好吧,其中有一个LinearLayout和两个FrameLayout。它们分别用于安装ActionBar和CustomView,并将setContentView()加载的布局放入此CustomView!
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
android:drawable="@mipmap/ic_rating_off1" />
<item android:id="@android:id/secondaryProgress"
android:drawable="@mipmap/ic_rating_off1" />
<item android:id="@android:id/progress"
android:drawable="@mipmap/ic_rating_on1" />
</layer-list>
总结三者之间的关系:一个牵强的比喻:我们可以分别称这三类:画家、画布和用画笔画的东西;艺术家用画笔(LayoutInfector.infalte)绘制一个图案,然后在画布上绘制(addView)!最终显示(setContentView)
ViewGroup
当的应用程序加载上述布局资源时,Android会将布局中的每个节点实例化为对象。然后,可以为这些对象定义一些其他行为,查询对象的状态,或修改布局。有关创建UI布局的完整指南,请参阅XML布局
用户界面组件
不需要使用所有View和ViewGroup对象创建UI布局。Android为我们提供了一些应用程序控件、标准UI布局,只需定义内容即可。这些UI组件具有用于其属性的API文档,例如操作栏、对话框和状态通知栏。
在Android APP中,所有用户界面元素都由View和ViewGroup对象组成。视图是用户在屏幕上绘制时可以与之交互的对象。ViewGroup是用于存储其他View(和ViewGroup)对象的布局容器!Android为我们提供了View和ViewGroup子类的集合,其中提供了一些常见的输入控件(如按钮和文本字段)和各种布局模式(如线性或相对布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I am a Button" />
</LinearLayout>
APP用户界面上的每个组件都由View和ViewGroup对象的层次结构组成,如图1所示。每个ViewGroup都是用于组织子视图的不可见容器。其子视图可以是在UI上绘制区域的输入控件或小部件。使用分层树,可以根据自己的需要设计简单或复杂的布局(布局越简单,性能越好)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);
TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);
img_icon.setBackgroundResource(mData.get(position).getaIcon());
txt_aName.setText(mData.get(position).getaName());
txt_aSpeak.setText(mData.get(position).getaSpeak());
return convertView;
}
Android中的图形界面由View、ViewGroup及其子类组成:View:所有视觉控件的父类,提供组件描述和时间处理方法。ViewGroup:View类的子类,可以有子控件,可以视为容器。Android UI中的控件按照这种分层树结构堆叠。有两种方法可以创建UI布局。可以用Java编写代码或通过XML定义布局,后者更方便、更易于理解!这也是我们最常用的方法!此外,我们很少使用View和ViewGroup直接编写布局,更经常使用它们的子类控件或容器来构建布局!
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}