edit README.md

This commit is contained in:
linglongxin24
2016-11-18 18:15:15 +08:00
parent 1ee0408aac
commit ad757734d5
12 changed files with 151 additions and 26 deletions

View File

@@ -1,31 +1,14 @@
#深入ActivityActivity启动模式LaunchMode完全解析 #深入ActivityActivity启动模式LaunchMode完全解析
#1.Standard标准启动模式 #1.Standard标准启动模式
Activity默认模式所有的Activity遵循元素进栈出栈的特性例如进栈序列为A->B->C->D,D呈现在页面上,按返回键出栈顺序久违D->C->B->A. Activity默认模式所有的Activity元素遵循先进后出的进栈出栈的特性例如进栈序列为A->B->C,CActivity展示给用户在页面上,按返回键出栈顺序C->B->A.。这种的比较简单
```flow
st=>start: Start
i=>inputoutput: 输入年份n
cond1=>condition: n能否被4整除
cond2=>condition: n能否被100整除
cond3=>condition: n能否被400整除
o1=>inputoutput: 输出非闰年
o2=>inputoutput: 输出非闰年
o3=>inputoutput: 输出闰年
o4=>inputoutput: 输出闰年
e=>end
st->i->cond1
cond1(no)->o1->e
cond1(yes)->cond2
cond2(no)->o3->e
cond2(yes)->cond3
cond3(yes)->o2->e
cond3(no)->o4->e
```
#2.SingleTop:栈顶复用模式 #2.SingleTop:栈顶复用模式
栈顶复用模式,如果要开启的activity在任务栈的顶已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。 栈顶复用模式,如果想要打开的activity在任务栈的顶已经存在,就不会创重新建新的实例,而是调用该Activity的 onNewIntent() 方法。避免栈顶的activity被重复的创建。
#3.SingleTask:栈内复用模式 #3.SingleTask:栈内复用模式
如果要启动的Activity在当前栈内启动activity只会在任务栈里面存在一个实例。如果要激活的activity在任务栈里面已经存在就不会创建新的activity而是复用这个已经存在的activity调用 onNewIntent() 方法并且清空这个activity任务栈上面所有的activity。 如果要启动的Activity在当前栈内启动之后,该activity只会在任务栈里面存在一个实例。如果要再次打开这个activity在任务栈里面如果已经存在就不会创建新的activity
而是复用栈内的这个已经存在的activity调用改Activity的 onNewIntent() 方法并且清空这个activity任务栈上面所有的activity。
#4.SingleInstance单一实例模式 #4.SingleInstance单一实例模式
整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用同一个activity。他会运行在自己单独独立的任务栈里面并且任务栈里面只有他一个实例存在。应用场景呼叫来电界面。这种模式的使用情况比较罕见在Launcher中可能使用。或者你确定你需要使Activity只有一个实例。 整个Android系统中(可能会有很多任务栈)里面只有一个实例存在。不同的应用程序app去启动这个activity,就会共享公用同一个activity。
他会运行在自己单独的的任务栈里面,并且这个单独的任务栈里面只会存在着一个实例。
应用场景系统的发短信打电话来电浏览器等。这种模式在平时很少去使用一般在Launcher中可能会用到。

View File

@@ -19,6 +19,9 @@
<activity android:name=".singletask.SingleTaskActivity" android:launchMode="singleTask"/> <activity android:name=".singletask.SingleTaskActivity" android:launchMode="singleTask"/>
<activity android:name=".singletask.LoginActivity"/> <activity android:name=".singletask.LoginActivity"/>
<activity android:name=".singletask.RegisterActivity"/> <activity android:name=".singletask.RegisterActivity"/>
<activity android:name=".singleinstance.SingleInstanceActivity"/>
<activity android:name=".singleinstance.SecondActivity" android:launchMode="singleInstance"/>
<activity android:name=".singleinstance.ThirdActivity" />
</application> </application>
</manifest> </manifest>

View File

@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.view.View; import android.view.View;
import cn.bluemobi.dylan.activitylaunchmode.singleinstance.SingleInstanceActivity;
import cn.bluemobi.dylan.activitylaunchmode.singletask.SingleTaskActivity; import cn.bluemobi.dylan.activitylaunchmode.singletask.SingleTaskActivity;
import cn.bluemobi.dylan.activitylaunchmode.singletop.SingleTopActivity; import cn.bluemobi.dylan.activitylaunchmode.singletop.SingleTopActivity;
@@ -24,4 +25,8 @@ public class MainActivity extends AppCompatActivity {
public void onClick2(View view) { public void onClick2(View view) {
startActivity(new Intent(this, SingleTaskActivity.class)); startActivity(new Intent(this, SingleTaskActivity.class));
} }
public void onClick3(View view) {
startActivity(new Intent(this, SingleInstanceActivity.class));
}
} }

View File

@@ -0,0 +1,35 @@
package cn.bluemobi.dylan.activitylaunchmode.singleinstance;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import cn.bluemobi.dylan.activitylaunchmode.singletask.LoginActivity;
import cn.bluemobi.dylan.activitylaunchmode.singletask.RegisterActivity;
/**
* Created by yuandl on 2016-11-18.
*/
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setGravity(Gravity.CENTER);
button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
button.setText("这是二个界面SingleInstance的启动模式点击跳转到第三个Activity标准的启动模式");
setContentView(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(SecondActivity.this, ThirdActivity.class));
}
});
}
}

View File

@@ -0,0 +1,36 @@
package cn.bluemobi.dylan.activitylaunchmode.singleinstance;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import cn.bluemobi.dylan.activitylaunchmode.singletask.LoginActivity;
import cn.bluemobi.dylan.activitylaunchmode.singletask.RegisterActivity;
/**
* Created by yuandl on 2016-11-18.
*/
public class SingleInstanceActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setGravity(Gravity.CENTER);
button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
button.setText("这是第一界面,标准的启动模式,点击跳转到SecondActivitySecondActivity启动模式是SingleInstance");
setContentView(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(SingleInstanceActivity.this, SecondActivity.class));
}
});
}
}

View File

@@ -0,0 +1,34 @@
package cn.bluemobi.dylan.activitylaunchmode.singleinstance;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import cn.bluemobi.dylan.activitylaunchmode.singletask.RegisterActivity;
/**
* Created by yuandl on 2016-11-18.
*/
public class ThirdActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setGravity(Gravity.CENTER);
button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
button.setText("这是三个界面,标准的启动模式,点击回退");
setContentView(button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}

View File

@@ -19,7 +19,8 @@
android:layout_marginStart="27dp" android:layout_marginStart="27dp"
android:layout_marginTop="64dp" android:layout_marginTop="64dp"
android:onClick="onClick" android:onClick="onClick"
android:text="@string/singleTop" /> android:text="@string/singleTop"
android:textAllCaps="false" />
<Button <Button
android:id="@+id/button" android:id="@+id/button"
@@ -32,6 +33,21 @@
android:layout_marginStart="27dp" android:layout_marginStart="27dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:onClick="onClick2" android:onClick="onClick2"
android:text="@string/singleTask" /> android:text="@string/singleTask"
android:textAllCaps="false" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="27dp"
android:layout_marginStart="27dp"
android:layout_marginTop="16dp"
android:onClick="onClick3"
android:text="@string/singleInstance"
android:textAllCaps="false" />
</LinearLayout> </LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textAllCaps">false</item>
</style>
</resources>

View File

@@ -3,4 +3,5 @@
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>
<string name="singleTop">singleTop-->栈顶复用模式></string> <string name="singleTop">singleTop-->栈顶复用模式></string>
<string name="singleTask">singleTask-->栈内复用模式></string> <string name="singleTask">singleTask-->栈内复用模式></string>
<string name="singleInstance">singleInstance-->单一实例模式></string>
</resources> </resources>

View File

@@ -8,6 +8,7 @@
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
</style> </style>
<style name="AppTheme.NoActionBar"> <style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item> <item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item> <item name="windowNoTitle">true</item>

BIN
screenshorts/demo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
screenshorts/device.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB