Explicit Intent & Implicit Intent

╰+哭是因爲堅強的太久メ 2022-05-31 13:47 300阅读 0赞

Intent用于启动Activity,Service或发送Broadcast。Intent的使用有隐式和显式之分,即Explicit Intent和Implicit Intent。

Explicit Intent是指,能够明确指定class,或者package name的Intent。例如

  1. Intent i = new Intent(Context,SecondActivity.class);
  2. startActivity(i);

Implicit Intent是指,使用action,data或categroy的filter方式。

  1. Intent intent = new Intent("myaction");
  2. startActivity(intent);
  3. Intent intent = new Intent();
  4. intent.setAction("myAction");
  5. intent.addCategory("myCategory");
  6. startActivity(intent);

在同一APP种,两种方式都可以使用。相对而言,隐式可以降低耦合,而显式效率更高。

若要跨APP,则必须使用隐式。

需要注意的是,在Android 5.0之后,跨进程调用Service,需要使用显式的方法,否则将会报错。

  1. java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.breakloop.servicedemo.MyService }

解决方案有两种。

(1)添加App Package Name.

  1. Intent mIntent = new Intent();
  2. mIntent.setAction("serviceAction");
  3. mIntent.setPackage("servicePackageName");
  4. context.startService(mIntent);

(2)将隐式Intent进行嵌套,封装为显式Intent

  1. Intent mIntent = new Intent();
  2. mIntent.setAction("serviceAction");
  3. Intent eintent = new Intent(getExplicitIntent(mContext,mIntent));
  4. context.startService(eintent);

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Intent

    在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它

    相关 Intent

          在android中,intent就像是一个邮差,辛勤高效的在各个组件之间来回穿梭。我们可以通过它启动一个Activity或者Service,或者是发送给广播组件,又