开发APP对于FLAG解决方案,首先深圳APP开发公司本文就FLAG解决方案对于FLAG进行简单介绍,启动Activity时,可以通过在传递给startActivity()的Intent中加入相应的FLAG,修改Activit与其任务的默认关联方式。
常用的FLAG说明:FLAG_ACTIVITY_NEW_TASK在新任务中启动Activity,如果为正在启动的Activity运行任务,则该任务会转到前台并恢复其最后状态,同时Activity会在onNewIntent()中收到新Intent。
使用这个FLAG会产生与“singleTask”启动模式相同的行为。FLAG_ACTIVITY_SINGLE_TOP
如果正在启动的Activity是当前Activity(位于返回栈的顶部),则现有实例会接收对onNewIntent()的调用,而不是创建Activity的新实例。使用这个FLAG会产生与“singleTop”启动模式相同的行为。
FLAG_ACTIVITY_CLEAR_TOP
如果正在启动的Activity已在当前任务中运行,则会销毁当前任务顶部的所有Activity,并通过onNewIntent()将此Intent传递给Activity已恢复的实例(现在位于顶部),而不是启动该Activity的新实例。
注意:如果指定Activity的启动模式为“standard”,则该Activity也会从堆栈中移除,并在其位置启动一个新实例,以便处理传入的Intent。这是因为当启动模式为“standard”时,将始终为新Intent创建新实例。FLAG_ACTIVITY_NO_HISTORY新的Activity将不在历史堆栈中保留,一旦从此Activity跳转到其他的Activity,那么这个Activity就销毁了。例如A启动B的时候,给B设置了FLAG_ACTIVITY_NO_HISTORY,那么B启动C后,堆栈中保留的Activity就会变为A和C。
开发APP关于解决Activity消息路由解决方案
在Android开发中,常遇到多个Activity间的直接通信和调用,这样会导致Acticity间的横向依赖。为了解决此问题,可以设计和实现一个路由框架,实现不同Activity间的解耦。
APP开发公司关于关于设计思路
实现一个Activity路由类,由这个类实现Activity间的路由,各Activity间不直接联系,由路由类作为中间件,实现各Activity间的联系。目前大多数路由方式都是采用URL的方式实现的,在此利用类的反射机制实现此功能,实现方式相对简单。
APP开发公司Activity消息路由具体实现 路由类的示例代码如下:publicclassActivityRouter{ //每创建一个Activity,就在此定义一个字符串,记录此Activity的类名
public static final String SECOND_ ACTIVITY = "com. example. myapplication. SecondActivity"; public static final String THREE_ ACTIVITY = "com. example. myapplication. ThreeActivity"; public static final String FOUR_ ACTIVITY = "com. example. myapplication. FourActivity"; // 传递 Activity 消息的方法, activityContext 表示 调用 startActivity 的 Activity, activityName // 表示被调用或被通知的 Activity 的类名字符串 public static boolean ActivityRouter( Intent intent, Context activityContext, final String activityName){ if( intent == null || activityContext == null || activityName == null){ return false; } Class<?> activityClass = null; try { // 通过类名字符串,找到相应的类 activityClass = Class. forName( activityName); if( activityClass != null){ intent. setClass( activityContext, activityClass); }
} catch (Exception e){ e. printStackTrace(); return false; } return true; } } 使用 示例: //Activity 间不传值时的情况 Intent intent = new Intent(); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. SECOND_ ACTIVITY)) { startActivity( intent); } //Activity 间传值时的情况 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle. putString(" keyString", "string"); bundle. putInt(" keyInt", 100);
intent. putExtras( bundle); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. THREE_ ACTIVITY)) { startActivity( intent); } //Activity 间传值,且主调 Activity 需要接收被调 Activity 返回值的情况 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle. putString(" keyString", "hello"); bundle. putInt(" keyInt", 400); intent. putExtras( bundle); if (ActivityRouter. ActivityRouter( intent, MainActivity. this, ActivityRouter. FOUR_ ACTIVITY)) { startActivityForResult( intent, REQUESTCODE); }
好了,APP开发公司本文关于“项目开发怎样解决Activity消息路由实操代码”的经验分享就到这里,谢谢关注,博纳网络编辑整理。