我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

启动页几乎成为了每个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实现渐变启动页和带有指示器的引导页


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

启动页几乎成为了每个app的标配,有些商家在启动页中增加了开屏广告以此带来更多的收入。目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢? 这篇文章主要包括以下两方面内容集成腾讯广告联盟的SDK启动页加载过程中,后台初始
2022-06-06

Android在启动adb时失败解决方案

今天在开发Android时启动adb时遇见了这个问题。因为我更新了最新的adt出现ADB server didn't ACK, failed to start daemon 然后你想启动一个程序这个时候又会出现 Please ensure
2022-06-06

Android【后台启动界面】问题 解决方案

需求:当android 手机 按了 home 键后  接到语音通话 需要 弹出 语音接听界面。 业务分析:当app 处于 后台状态下(按home键)接到socket 消息或者推送消息   然后 直接从后台 弹出界面。 最终效果:很多 新版(
2022-06-06

Android实现几种推送方式解决方案

本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息。这种推送功能是好的一面,但是也会经常看到
2022-06-06

与iframe进行跨域交互的解决方案(推荐)

这篇文章主要介绍了与iframe进行跨域交互的解决方案,本文通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-14

Win7启动提示ErrorloadingOS解决方案

我们在使用电脑时经常会遇到各种问题,其中最常见的是系统提示。很多用户报告说系统启动提示errorloadingos。如何解决win7启动时出现的errorloadingos提示?事实上,解决方法非常简单。让我们教你解决办法!1.如图所示,如
2023-07-12

chatgpt 1020 错误码成功解决的三种方案(推荐)

造成1020错误的主要原因是代理问题,当打开代理时,登录该网站会直接显示上述错误“Access denied Error code 1020”,怎么解决这个问题呢,下面小编给大家带来了chatgpt 1020 错误码成功解决的三种方案,感兴趣的朋友一起看看吧
2023-02-18

Dedecms文章设置推荐后列表页标题自动加粗的解决方法

本文实例讲述http://www.cppcns.com了Dedecms文章设置推荐后列表页标题自动加粗的解决方法。分享给大家供大家参考。具体分析如下: 使用dedecms时我们会发现,在后台把文章设置推荐之后,列表页面标题会自动加粗,这样如
2022-06-12

windows7启动直接黑屏解决方案

windows7启动直接黑屏怎么办呢,用户使用win7的时候假如驱动出问题的话便会碰到黑屏的状况,这个时候用户怎么操作都没办法直接进入系统,那么怎么才能处理开机黑屏的难题呢,用户们开机黑屏的问题事实上很容易处理,这儿就增添了windows7
2023-07-10

Android自动化测试解决方案

现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric。另外LessPainful也提供服务
2022-06-06

Win7启动提示ErrorloadingOS的解决方案

在操作计算机时,我们通常会遇到一些问题,其中最常见的是系统弹出的提示信息。许多用户报告说,系统启动提示errorloadingos。如果你遇到win7启动时出现"Error loading OS"的提示,你应该怎么处理?但事实上,这个问题很
2023-07-10

win10启动时,recovery解决方案出现

若遇到win10系统中出现的recovery现象,win10启动recovery会怎样?放轻松点,跟小编一起来看具体解决办法。1.首先进入pe桌面,双击计算机图标,进入系统盘符。2.输入之后,检查前一个是系统盘。3.在您回到pe桌面之后,启
2023-07-11

Android应用启动白屏处理方案详解

这篇文章主要为大家介绍了Android应用启动白屏处理方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-27

springboot启动404问题以及解决方案

SpringBoot启动404问题是指访问非首页URL时出现404错误,原因包括:SpringSecurity配置错误缺少控制器路径映射错误视图模板不存在静态资源配置错误缺失父级依赖EmbeddedServletContainerCustomizer配置错误缺少DispatcherServlet特殊字符编码服务器端口错误服务器环境针对这些原因,本文提供了相应的解决方案,例如检查配置、添加控制器、更正路径映射、创建视图模板等。此外,还建议调试应用程序和检查日志文件以查找其他线索。
springboot启动404问题以及解决方案
2024-04-02

电脑启动后黑屏的解决方案

虽然黑屏是我们使用计算机时常见的问题之一,但不能将其归咎于硬件或软件问题。计算机启动后黑屏的原因通常是软件问题。如果您设置了问题鼠标,请右键显示桌面。如果不能解决,请详细了解以下解决方案。1.如果是在Windows标志出来之前的黑屏,按下启
2023-07-12

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录