从需求出发:QMUI 最新版 QMUISchemeHandler 的设计与实现解析
发布日期:2021-05-11 02:24:55 浏览次数:10 分类:精选文章

本文共 6284 字,大约阅读时间需要 20 分钟。

QMUISchemeHandler ���������������

��������������������������������������������������������������������������������������������������������������������������������������������� QMUISchemeHandler���������������������������������������������������������������������������������������������

������������

QMUISchemeHandler ������������������������������������������������������������������������������������ URL scheme ��������������������������������������������������������������������������������������������������������������������� URL ���������������������������������������������������

��� keystyle URL scheme ������������������������

schemeName://action?param1=value1&param2=value2

���������������

qmui://home?tab=2

������������������������������������������������������������������

  • ������ URL scheme ������������������������
  • ������������������������������������������
  • ���������������������

    ������������������������������������QMUILib ��������������������������������������������� QMUISchemeHandler���ActivityScheme ��� FragmentScheme ������������������������������������������������������������������������������������

    QMUISchemeHandler ������

    ������������������������QMUISchemeHandler ��������������� Builder ���������������������������������������������������������������

    • ������ scheme ������������ scheme ���������������������������������������
    • ������������������������������������������������������ scheme ���������
    • ���������������������������������������������������
    • ��������������������������� fragment ��������� activity ��������� scheme ������������

    hello, ������������������������������QMUISchemeHandler ��������������������������������������������������������� Asynchronous Example���

    QMUISchemeHandler qmui = QMUISchemeHandler    .Builder("qmui://")    .blockSameSchemeTimeout(1000)    .addInterpolator(new QMUISchemeParamValueDecoder())    .addInterpolator(...)    .defaultFragmentFactory(...)    .defaultIntentFactory(...)    .defaultSchemeMatcher(...)    .build();boolean handled = qmui.handle("qmui://xxx");

    ActivityScheme ��� FragmentScheme ������

    ������������������������������������QMUI ��������� ActivityScheme ��� FragmentScheme ��������������������������������������� Fragment ������������������������

    ActivityScheme ������

    ������������������������������������������������������

    • name()��������� scheme ���������
    • required()������������������������������������������������������
    • useRefreshIfCurrentMatched()������������������������������������������������������������
    • customMatcher()������������ scheme ���������������
    • customFactory()������������ activity ������������������
    • keysWith*Value()������������������������

    FragmentScheme ������

    ��� Fragment ��������������� ActivityScheme ������������������������������������������

    • activities()������������������������������������������������������������ activity���
    • forceNewActivity()������������������������������������ activity���
    • forceNewActivityKey()��������� scheme ������������������������������������ activity���

    ���������FragmentScheme ������������������������������������������������������ ActivityScheme ������������������������������

    ������������

    ��������������������������������������������������� Activity ��� Fragment ���������������������������QMUI ������������������������������������������������������������ intent ��� arguments ��������������������������� onCreate ���������������������������

    @ActivityScheme(name = "activity1")class Activity1 : QMUIActivity {    override fun onCreate(savedInstanceState: Bundle?) {        if (isStartedByScheme()) {            // ���������������            val param1 = getIntent().getStringExtra("paramName")        }    }}@FragmentScheme(name = "fragment1", activities = { QDMainActivity::class.java })class Fragment1 : QMUIFragment {    override fun onCreate(savedInstanceState: Bundle?) {        if (isStartedByScheme()) {            // ���������������            val param1 = getArguments().getString("paramName")        }    }}

    ��������������� Web ������������������������������������ WebViewClient ��� shouldOverrideUrlLoading ��������������� scheme ���������

    class MyWebViewClient : WebViewClient {    override fun shouldOverrideUrlLoading(        view: WebView,        url: String    ): Boolean {        if (schemeHandler.handle(url)) {            return true        }        return super.shouldOverrideUrlLoading(view, url)    }    override fun shouldOverrideUrlLoading(        view: WebView,        request: WebResourceRequest    ): Boolean {        if (schemeHandler.handle(request.getUrl().toString())) {            return true        }        return super.shouldOverrideUrlLoading(view, request)    }}

    ������������

    QMUISchemeHandler ��������������������������������� SchemeProcessor ������ SchemeMapImpl ������������ SchemeMap ���������������������������������������������������

    SchemeMap ������������

    public interface SchemeMap {    // ������ schemeAction ��������������� SchemeItem    SchemeItem findScheme(QMUISchemeHandler handler, String schemeAction, Map
    params); // ������ schemeAction ������������ boolean exists(QMUISchemeHandler handler, String schemeAction);}

    SchemeProcessor ������������

    SchemeProcessor ������������������ SchemeMapImpl ��������������������������� scheme ��������������������������� SchemeMap ������������������������������������

    • ������������������������������ @ActivityScheme ��� @FragmentScheme ���������
    • ��������� scheme ��������������������� SchemeItem ���������
    • ��������� SchemeItem ��������� mSchemeMap ������

    SchemeItem ������

    ������ SchemeItem ������������������������ scheme ������������������������������

    • ��������� Class
    • ���������������������
    • ������������������������������
    • ������������ matcher ���
    • ������������������
    • ���������������������

    ���������������������QMUISchemeHandler ���������������������������������������������������������������������������

    ������

    QMUISchemeHandler ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Activity ��� Fragment ������������������

    ���������������������������������������������������������������������������������������������������

    上一篇:Android面试送分题:关于 Application,你了解多少呢?
    下一篇:Android面试:计算机网络面试知识点系统总结,拔剑金九银十!(持续更新中)

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月11日 21时07分09秒