当前位置: 移动技术网 > IT编程>移动开发>Android > Android 应用的欢迎界面实现代码

Android 应用的欢迎界面实现代码

2019年07月24日  | 移动技术网IT编程  | 我要评论

泷泽萝拉内涵图,房探007济南,碌卡什么意思

本文详细描述了如何实现如下图中的微信启动界面. 该类启动界面的特点是在整个application的生命周期里, 它只会出现在第一次进入应用时, 即便按回退键到桌面之后. 使用该类启动界面的应用还有: qq, qq音乐, 网易云音乐和微博等等.

知识要点:

androidmanifest.xml 中 activity 的 android:nohistory 属性, 即 intent.flag_activity_no_history

隐式intent

回退栈(backstack) 

详细内容见官方文档.

实现代码:

定义

splashactivity 为启动界面

mainactivity 为主界面

androidmanifest.xml

<!-- 该文件为androidmanifest.xml, 以下代码为application下的activity声明 -->

<!-- 启动界面 -->
<activity android:name=".splashactivity"
  android:label="@string/app_name"
  android:nohistory="true">
 <intent-filter>
 <action android:name="android.intent.action.main"/>
 <category android:name="android.intent.category.launcher"/>
 </intent-filter>
</activity>

<!-- 主界面 -->
<activity android:name=".mainactivity" android:label="@string/app_name">
</activity>

特别需要注意的是, 在上述activity-xml定义中, 我们设置了splashactivity为nohistory的属性为true, 该设置是告诉系统只要离开该activity, 则请把该activity从回退栈中清除. 另外, 直接在intent中设置intent.flag_activity_no_history标识的效果同设置该属性为true的.

splashactivity.java

import ...

public abstract class splashactivity extends activity implements runnable {
 final handler mhandler = new handler();

 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_splash);

 mhandler.postdelayed(this, 2000);
 }

 @override
 public void run() {
 intent intent = new intent(this, mainactivtiy.class);
 startactivity(intent);
 // 此处可以不需要调用finish()了, 因为已经设置了nohistory属性, 从而使得系统接管finish操作
 }
}

 mainactivity.java

import ...

public abstract class mainactivity extends activity {
 ...

 @override
 public void onbackpressed() {     
    // 方法 1: goto the default launcher. it's not recommended.
    // intent i = new intent(intent.action_main);
    // i.setflags(intent.flag_activity_new_task);
    // i.addcategory(intent.category_home);
    // startactivity(i);

    // 方法 2: goto the default launcher. it's recommended.
    movetasktoback(true);
  }
}

上述代码中, 提供了两个方法, 第一个方法通过隐式intent来切换到桌面应用(即launcher), 第二个方法则是将当前activity所在的task切换到后台, 需要注意的是, movetasktoback(boolean nonroot) 的 nonroot 参数, 如果nonroot=false, 则要求当前activity为栈顶activity, 否则, 调用将不起任何效果, 如果nonroot=true, 则忽略nonroot=false时的条件, 因此, 我们在这里直接设置nonroot=true

到这里, 我们可以一直按回退键, 直到切换到桌面, 这时splashactivity已经被系统清理了, mainactivity连同它所在的task已经切换到后台了. 下次我们再启动应用时, 只要mainactivity没有被系统回收, 那么我们再看到的mainactivity还是退回到桌面前的那个mainactivity.

希望本篇文章能帮助开发android应用的朋友。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网