启动Activity的方式

    xiaoxiao2022-07-13  102

    显示启动

    1、跳转Activity,可以直接显示调用,如下所示:

    startActivity(new Intent(this,DemoActivity.class)); // Service的显式启动类似:startService(new Intent(this,DemoService.class));

    2、如果要调用不是自己应用的Activity,或者跳转的Activity是动态变化的,就可以使用包名+类名的方式显示调用,如下所示:

    Intent intent = new Intent(); // 跳转到Activity:包名+类名 intent.setClassName("包名","类名"); startActivity(intent);

    但是如果目标Activity不存在岂不是很尴尬,所以需要判断目标Activity是否存在:

    List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0); if (resolveInfos != null && resolveInfos.size() > 0) { // 存在此类名才跳转 }

    最后,包名+类名的方式显示调用实战代码如下:

    Intent intent = new Intent(); intent.setClassName(getPackageName(), SPUtils.getInstance().getString(GlobalVar.SP_ATTR1_JUMPV_VIEW)); // 跳转到Activity:包名+类名 List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0); if (resolveInfos != null && resolveInfos.size() > 0) { // 存在此类名才跳转 startActivity(intent); }

    隐式启动

    1、隐式启动,如下所示:

    startActivity(new Intent("约定好的action名")); // Service的隐式启动类似:startService(new Intent("约定好的action名"));

    2、 有时候和同事协同开发,对方想访问我其中的某个页面,就可以使用如下隐式调用方式:

    前提:双方约定好action名,以及传参TAG等。

    public static void openOtherActivity(Context context,int categoryId) { Intent intent = new Intent("约定好的action名"); List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resolveInfos != null && resolveInfos .size() > 0) { intent.putExtra("传参TAG", categoryId); context.startActivity(intent); } else { Toast.makeText(context, "not found", Toast.LENGTH_SHORT).show(); } }
    最新回复(0)