参考这位博主(https://blog.csdn.net/jyg3103/article/details/106525719) Activity4种模式(https://blog.csdn.net/zy_jibai/article/details/80587083) Android文档(http://www.android-doc.com/guide/components/fundamentals.html) isTaskRoot解释(https://www.jianshu.com/p/eea14ca0b164)
前言
首先我不是Android开发,只是简单看了一下文档,里面有理解错误的地方,欢迎指出,乱喷就举报 建议简单看一下后3篇文档文章,然后再看第一篇,不然看起来会很懵逼
Activity
- Activity生命周期函数 onCreate 当Activity被创建时调用
<Activity> 标签通过<intent-filter> 决定其他组件如果启动这个Activity<action android:name="android.intent.action.MAIN"/> 决定程序入口<category android:name="android.intent.category.LAUNCHER" /> LAUNCHER被列入系统启动器finish(); 关闭Activity
Intent
- Intent 定义了将要执行的动作
- Intent文档中:intent最牛逼的地方其实是它的动作(action)概念,使用action,你可以简单地描述以下你想执行的动作(并且你也可以指定你想把哪些数据放在这个动作上),并且允许系统去寻找设备上可以执行这个动作的组件并启动它。
- startActivity(intentInstance)启动 UnityPlayerActivity,还可以使用这样的形势描述系统提供的响应动作 e.g.发送邮件 Intent intent = new Intent(Intent.ACTION_SEND);
Task
- Task是多activity的集合,activity在Task栈中顺序永远不会变,只会压栈和退栈
- 当用户按下home或启动一个新Task,当前Task变为后台,内部所有activity都会停止
- 在
<activity中的 launchMode> 可以定义当前activity与Task怎样关联 - launchMode有四种模式(具体看上面网址里的说明)
Unity播放广告时 -> 切到后台 -> 然后切回Unity 导致广告消失
- 修改manifest 设置启动项为GamePlayerActivity
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:theme="@style/UnityThemeSelector"
android:launchMode="singleTask">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<activity android:name="com.easy.android.GamePlayerActivity"
android:theme="@style/UnityThemeSelector"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- GamePlayerActivity中onCreate,具体看里面的注释
public class GamePlayerActivity extends Activity
{
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
CrashReport.initCrashReport(getApplicationContext(),"871a52c364", false);
if(!this.isTaskRoot()){
Intent intent = getIntent();
if(intent != null){
String action = intent.getAction();
if(intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)){
finish();
return;
}
}
}
Intent intent = new Intent(GamePlayerActivity.this, UnityPlayerActivity.class);
startActivity(intent);
}
}
|