首先:在Activity/Fragment类上面写上 Route path 注解。 [原创文章:www.11jj.com]
注意:这里的路径需要注意的是至少需要有两级,/xx/xx
然后:在Activity/Fragment类里面进入Arouter 注入,也就是: ARouter.getInstance().inject(this);
接着:目标的Activity类上面需要声明Route path 注解,以此对应(跳转如果不对应路径,框架会Toast说路径不匹配)
上述说明的使用代码如下:
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
// 路径标签个人建议写在一个类里面 这样方便统一管理和维护
@Route(path = "/app/MainActivity")
public class MainActivity extends BaseActivity {
public static final String TAG = "app";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ARouter.getInstance().inject(this);
/**
* Activity 跳转 (普通跳转)
* 跳转到SimpleActivity
*/
findViewById(R.id.skip).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ARouter.getInstance().build( "/app/SimpleActivity").
navigation();
}
});
理论上来说,如果只是进行简单的跳转页面,ARouter.getInstance().build(“目标界面对应的路径”).navigation();这一行代码即可完成跳转界面。由于项目的扩大、界面的跳转成为了很常见的功能、路径的标签数量也会相对增多。因此需要更好管理的界面路径(所以更好的选择是写一个类,在这个类里面统一管理和维护路径标签,不仅利于维护也方便后期拓展,看到路径就一目了然,哇~这个路径对应的是登录界面,这个路径对应的是详情界面而且更加容易排错);
其次,每个页面的注入,也就是ARouter.getInstance().inject(this);这句代码出现的几率会写的很多,(而且一般的常规逻辑是有注入就有解绑或者释放资源)所以我们应该简单封装起来提高效率。
简单封装
首先是路径管理(只是参考):
/**
* ARouter上面的注解需要我们写路径标识
* 我们可以写一个常量文件,在这里统一管理路径标签
*/
public final class Constance {
public static final String TAG = "app";
public static final boolean UseIInterceptor = true;
public static final String ACTIVITY_URL_MAIN = "/app/MainActivity";
public static final String ACTIVITY_URL_SIMPLE = "/app/SimpleActivity";
public static final String ACTIVITY_URL_PARSE = "/app/SimpleUriActivity";
public static final String ACTIVITY_URL_SECOND = "/app/SecondActivity";
public static final String ACTIVITY_URL_INTERCEPTOR = "/app/Interceptor";
public static final String ACTIVITY_URL_FRAGMENT = "/app/fragment";
public static final String GROUP_FIRST = "group_first";
}
然后是注入封装;这里多提一嘴,优秀的第三方框架如果一般有注入或者绑定的API,那与之对应的一般就会有释放或者解绑资源的API。(这样做的本质是优化内存)其中, ARouter.getInstance().destroy() ; 这个API一目了然,就是释放资源的API。下面就是开始注入和释放资源的封装:
public class BaseActivity extends AppCompatActivity {
private SparseArray<View> mViews;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ARouter inject 注入
ARouter.getInstance().inject(this);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mViews = new SparseArray<>();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 这样写会报错
// ARouter.getInstance().destroy();
}
笔者在Activity的基类里面通过生命周期进行了注入和解绑,但是项目运行后发现了一个问题,就是如果在onDestroy()里面调用了 ARouter.getInstance().destroy() ; 在进入目标Activity之后,然后按back键返回原界面的时候,APP会报错崩溃,下面是崩溃日志:
仔细一看,初始化有问题?在前面我们说到在自定义Application里面已经初始化了ARouter,且在清单文件里面配置了自定义的Application,但是依旧提示没有初始化,这就纳了个闷?然后想了想,可能是 ARouter.getInstance().destroy();这行代码的使用位置可能用错了。然后既然是在Application里面进行的初始化,那么就可以将这行释放资源的代码,写在Application生命周期的onTerminate( )里面,果不其然,项目运行后就没什么问题了。当然,这是我自己的思路,有更好的意见和想法请在评论区指出,谢谢。因此调整之后的Application写法如下:
public class HomeApplication extends Application {
// ARouter 调试开关
private boolean isDebugARouter = true;
@Override
public void onCreate() {
super.onCreate();
if (isDebugARouter) {
// 下面两行必须写在init之前,否则这些配置在init过程中将无效
ARouter.openLog(); // 打印日志
// 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!
// 线上版本需要关闭,否则有安全风险)
ARouter.openDebug();
}
// 官方建议推荐在Application中初始化
ARouter.init(HomeApplication.this);
}
@Override
public void onTerminate() {
super.onTerminate();
ARouter.getInstance().destroy();
}
}使用
大家好,小伟今天来为大家解答数字易经0到9代表什么卦以下问题,数字易经测算很多人还不知道,现在让我们一起来看看吧!1、数字1代表坎水、数
大家好,小乐今天来为大家解答苹果手机呼叫转移怎么设置以下问题,苹果手机呼叫转移怎么设置无法接通很多人还不知道,现在让我们一起来看看
大家好,小豪今天来为大家解答中国红十字会标志简笔画以下问题,中国红十字会标志简笔画很多人还不知道,现在让我们一起来看看吧!1、保护性
大家好,小美今天来为大家解答八年级下册语文书人教版电子书以下问题,八年级下册语文书人教版电子书2022很多人还不知道,现在让我们一起来看
大家好,小丽今天来为大家解答古伊尔以下问题,魔兽古伊尔很多人还不知道,现在让我们一起来看看吧!1、古伊尔是魔兽世界里面部落的一个酋长
在高档数学的进修中,我们经常会碰着独一驻点的问题,在非常宽松的前提下,这个独一的驻点也就是极值点。今天我们稍微改变一下前提,商量如
大家好,小乐今天来为大家解答三公九卿制是什么以下问题,三公九卿制是什么朝代的制度很多人还不知道,现在让我们一起来看看吧!1、三公九卿
大家好,小娟今天来为大家解答订房网哪个平台好以下问题,订房什么网最便宜很多人还不知道,现在让我们一起来看看吧!1、携程、美团、艺龙、
Copyright 2024.依依自媒体,让大家了解更多图文资讯!