iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android启动页解决方案(推荐)
  • 335
分享到

Android启动页解决方案(推荐)

解决方案Android 2022-06-06 01:06:05 335人浏览 安东尼
摘要

启动页几乎成为了每个app的标配,有些商家在启动页中增加了开屏广告以此带来更多的收入。目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢? 这篇文章主要包括

启动页几乎成为了每个app的标配,有些商家在启动页中增加了开屏广告以此带来更多的收入。目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢?

这篇文章主要包括以下两方面内容

集成腾讯广告联盟的SDK 启动页加载过程中,后台初始化数据

我们在设计启动页时的常规做法是建立一个Activity来加载开屏图片或者广告,作为程序的入口,那么在这个三到五秒时间内如果进行数据下载,当用户点击了跳过按钮或者计时结束了数据还没初始化完成,已经进入了主页面,而主界面刚好需要那些基础数据该如何?

因此,我们将启动页和主界面设计成两个Fragment,集成到MainActivity中。这样我们在启动页中加载广告,在主界面中下载数据,登陆等耗时操作,程序的结构如下:

01 activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="Http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.landptf.blog.MainActivity">
 <fragment
 android:id="@+id/fm_splash"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 class="com.landptf.blog.splash.SplashFragment" />
 <fragment
 android:id="@+id/fm_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 class="com.landptf.blog.MainFragment" />
</FrameLayout>

包含了两个fragment,分别是加载广告也和主界面的

02 MainActivity.java



public class MainActivity extends AppCompatActivity {
 private FragmentManager frManager;
 private SplashFragment fmSplash;
 private MainFragment fmMain;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initView();
 }
 private void initView() {
 frManager = getSupportFragmentManager();
 fmSplash = (SplashFragment) frManager.findFragmentById(R.id.fm_splash);
 fmMain = (MainFragment) frManager.findFragmentById(R.id.fm_main);
 showSplash();
 }
 private void showSplash(){
 frManager.beginTransaction().hide(fmMain).show(fmSplash).commit();
 }
 public void dismissSplash(){
 frManager.beginTransaction().hide(fmSplash).show(fmMain).commitAllowingStateLoss();
 }
}

在SplashFragment中广告加载完成或者点击跳过后调用dismissSplash将SplashFragment隐藏,将MainFragment显示出来

03 SplashFragment.java



public class SplashFragment extends Fragment {
 private static final String TAG = SplashFragment.class.getSimpleName();
 private MainActivity activity;
 private ViewGroup container;
 private TextView tvSkip;
 private ImageView ivSplashHolder;
 private static final String SKIP_TEXT = "点击跳过 %d";
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 }
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
 return inflater.inflate(R.layout.fragment_splash, container, false);
 }
 @Override
 public void onActivityCreated(@Nullable Bundle savedInstanceState) {
 super.onActivityCreated(savedInstanceState);
 activity = (MainActivity) getActivity();
 initView();
 }
 private void initView() {
 container = (ViewGroup) activity.findViewById(R.id.fl_splash_container);
 tvSkip = (TextView) activity.findViewById(R.id.tv_skip);
 ivSplashHolder = (ImageView) activity.findViewById(R.id.iv_splash_holder);
 //申请动态权限
 ApplyPermissions();
 }
 
 private void ApplyPermissions() {
 RxPermissions rxPermissions = new RxPermissions(activity);
 rxPermissions
  .request(Manifest.permission.READ_PHONE_STATE,
   Manifest.permission.ACCESS_COARSE_LOCATION,
   Manifest.permission.WRITE_EXTERNAL_STORAGE)
  .subscribe(granted -> {
   if (granted) {
   //获取开屏广告
   new SplashAD(activity, container, tvSkip, Constants.APPID, Constants.SplashPosID, adListener, 5000);
   } else {
   //直接进入主页面
   activity.dismissSplash();
   }
  });
 }
 
 private SplashADListener adListener = new SplashADListener() {
 
 @Override
 public void onADDismissed() {
  activity.dismissSplash();
 }
 
 @Override
 public void onNoAD(int i) {
  Log.e(TAG, "error code = " + i);
  activity.dismissSplash();
 }
 
 @Override
 public void onADPresent() {
  ivSplashHolder.setVisibility(View.GoNE);
 }
 
 @Override
 public void onADClicked() {
  Log.i(TAG, "SplashADClicked");
 }
 
 @Override
 public void onADTick(long l) {
  tvSkip.setText(String.fORMat(SKIP_TEXT, Math.round(l / 1000f)));
 }
 };
}

这里集成了腾讯广告联盟,点击这里注册,流程比较简单,按照说明一步一步进行就可以了,sdk文档也比较详细。

当广告加载完成后调用 activity.dismissSplash();将其隐藏

04 MainFragment.java



private void testThread(){
 new Thread(() -> {
 int i = 0;
 while (i < 5) {
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  Log.e(TAG, "--- " + i + " ---");
  i++;
 }
 }).start();
}

在MainFragment主线程中开启了一个只线程来模拟耗时操作,通过log可以看到在广告倒计时的过程中线程已经在执行了。


03-18 03:30:50.348 9491-9513/com.landptf.blog E/MainFragment: --- 0 ---
03-18 03:30:51.348 9491-9513/com.landptf.blog E/MainFragment: --- 1 ---
03-18 03:30:52.348 9491-9513/com.landptf.blog E/MainFragment: --- 2 ---
03-18 03:30:53.349 9491-9513/com.landptf.blog E/MainFragment: --- 3 ---
03-18 03:30:54.350 9491-9513/com.landptf.blog E/MainFragment: --- 4 ---

以上就是app的启动页方案,充分利用了加载广告的时间

全部代码已上传至GitHub,欢迎访问

以上所述是小编给大家介绍的Android启动页解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:Android项目实战教程之高仿网易云音乐启动页实例代码Android启动页出现白屏、黑屏的解决方案Android启动页广告(腾讯广告联盟)解决方法及源码下载Android启动页面定时跳转的三种方法Android优化之启动页去黑屏实现秒启动Android开发之开发者头条(一)启动页实现Android启动引导页使用ViewPager实现Android实现过渡动画、引导页 Android判断是否第一次启动AppAndroid开发实战之漂亮的ViewPager引导页Android控件ViewPager实现带有动画的引导页Android开发实现的ViewPager引导页功能(动态加载指示器)详解Android实现渐变启动页和带有指示器的引导页


--结束END--

本文标题: Android启动页解决方案(推荐)

本文链接: https://www.lsjlt.com/news/21841.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter Android应用启动白屏的解决方案
    目录问题产生如何解决总结问题产生 默认生成的flutter工程,在启动时候会白屏,设备性能越差,白屏时间越长。原生Android开发也会遇到类似问题,启动会产生白屏或者黑屏问题。在...
    99+
    2024-04-02
  • K8s解决主机重启后kubelet无法自动启动问题(推荐)
    目录1,问题描述2,问题原因3,解决办法1,问题描述 (1)在安装配置好Kubernetes后,正常情况下服务器关机重启,kubelet也会自动启动的。但最近配置的一台服务器重启后,...
    99+
    2024-04-02
  • Keepalived 启动失败解决方案
    启动Keepalived服务时发现启动失败,于是查看了日志 (/var/log/messages)如图所示   这条信息--WARNING - interface eth0 for vrrp_instance VI_1 doesn't ex...
    99+
    2023-09-07
    linux 服务器 运维
  • Oracle 11gR2中启动Scott用户的方法(推荐)
    Oracle 中启动 Scott 用户 的方法 , 在 Oracle11gR2, (g 代表‘网络'的意思) 数据库中 Scott 这个用户 安装时是被锁定的, 安装 Oracle的时候 ,你可以直接选择 ...
    99+
    2024-04-02
  • 与iframe进行跨域交互的解决方案(推荐)
    目录前言使用 postMessage() 方法使用location.hash document.domain属性 使用window.name 属性 CO...
    99+
    2023-03-14
    iframe跨域交互 iframe跨域
  • Win7启动提示ErrorloadingOS解决方案
    我们在使用电脑时经常会遇到各种问题,其中最常见的是系统提示。很多用户报告说系统启动提示errorloadingos。如何解决win7启动时出现的errorloadingos提示?事实上,解决方法非常简单。让我们教你解决办法!如图所示,如果启...
    99+
    2023-07-12
  • chatgpt 1020 错误码成功解决的三种方案(推荐)
    目录Chatgpt Access denied Error code 1020如何解决? 一、问题原因       二 、...
    99+
    2023-02-18
    1020的错误码 chatgpt 1020 错误码
  • Android应用启动白屏处理方案详解
    目录正文配置一个SplashActivity让我们来看看logo_drawable注意:总结正文 相信大家一定遇到过某些App在手机桌面打开时会出现短暂或者几秒钟的白屏情况吧,没错...
    99+
    2023-02-27
    Android启动白屏处理 Android 白屏处理
  • win10启动时,recovery解决方案出现
    若遇到win10系统中出现的recovery现象,win10启动recovery会怎样?放轻松点,跟小编一起来看具体解决办法。首先进入pe桌面,双击计算机图标,进入系统盘符。输入之后,检查前一个是系统盘。在您回到pe桌面之后,启动工具来修复...
    99+
    2023-07-11
  • windows7启动直接黑屏解决方案
    windows7启动直接黑屏怎么办呢,用户使用win7的时候假如驱动出问题的话便会碰到黑屏的状况,这个时候用户怎么操作都没办法直接进入系统,那么怎么才能处理开机黑屏的难题呢,用户们开机黑屏的问题事实上很容易处理,这儿就增添了windows7...
    99+
    2023-07-10
  • android开机自动启动app的解决方法
    经过多次尝试之后,终于找到了开机自动启动App的解决方法 开机后会停留在锁屏页面,且短时间内如果没有进行解锁操作,屏幕会进入休眠状态,所以启动APP时需要先唤醒屏幕和解锁屏幕 定义一...
    99+
    2024-04-02
  • MySQL 启动服务报错解决方案
    报错的源头问题解决1.权限报错的源头就是它了,一般这种问题首先会想到的就是权限问题,就是/var/lib/mysql该文件夹的权限上图可以看到mysql文件夹的用户和组都是mysql且mysql有写的权限,...
    99+
    2024-04-02
  • Win7启动提示ErrorloadingOS的解决方案
    在操作计算机时,我们通常会遇到一些问题,其中最常见的是系统弹出的提示信息。许多用户报告说,系统启动提示errorloadingos。如果你遇到win7启动时出现"Error loading OS"的提示,你应该怎么处理?但事实上,这个问题很...
    99+
    2023-07-10
  • Android 启动模式FLAG_ACTIVITY_CLEAR_TOP案例详解
    四种启动模式 standard: 只要被启动就会创建一个新的 singleTop: 栈顶复用(当被启动的Activity处于Task栈顶时,可以复用,直接调用o...
    99+
    2024-04-02
  • Android启动初始化方案AppStartUp的应用详解
    目录ContentProvider中初始化App StartupApp Startup使用延迟初始化StartUp是为了App的启动提供的一套简单、高效的初始化方案。 Content...
    99+
    2024-04-02
  • Android启动页设置及动态权限跳转问题解决
    目录启动页的作用启动页跳转动态权限获取完整启动页控制程序启动页的作用 在我遇到这个实际问题之前,我一直认为启动页的作用是美化产品,提升软件逼格。但实际上,它更重要的是起到了一个拦截器...
    99+
    2024-04-02
  • phpstudy mysql启动后停止的解决方案
    目录发现问题解决方案:1.关闭mysql服务2.管理员命令下删除mysql服务3.删除环境变量(之前不成功一直没有删这个)关于数据库MYSQL服务无法启动的问题:总结发现问题 原来安...
    99+
    2022-11-13
    phpstudy中mysql启动后自动停止 phpstudypro mysql启动不了 phpstudy启动后就停止
  • 电脑启动后黑屏的解决方案
    虽然黑屏是我们使用计算机时常见的问题之一,但不能将其归咎于硬件或软件问题。计算机启动后黑屏的原因通常是软件问题。如果您设置了问题鼠标,请右键显示桌面。如果不能解决,请详细了解以下解决方案。如果是在Windows标志出来之前的黑屏,按下启动键...
    99+
    2023-07-12
  • docker启动ES内存溢出的解决方案
    在elasticsearch的config中加jvm.options文件,修改堆栈大小,默认是2GB,直接启动es即可,保证之前已经映射了配置文件。 -Xms5g -Xmx5g ...
    99+
    2024-04-02
  • springBoot整合Eureka启动失败的解决方案
    其实springBoot 整合Eureka 是比较简单 ,可是我发现很多人整合后会启动不了,我这里列出比较常见的报错的原因 报:A child container failed d...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作