Activity 显式启动与隐式启动 应用

493 查看

一、Activity 显式启动 (代码示例):


public class MyActivity extends Activity {
    Button buttonStart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonStart = (Button) findViewById(R.id.start);
        buttonStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显示启动
                Intent intent = new Intent();
                intent.setClass(MyActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
     }
}

二、Activity 隐式启动 (代码示例):

public class MyActivity extends Activity {
    Button buttonStart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonStart = (Button) findViewById(R.id.start);
        buttonStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //隐式启动
                Intent intent = new Intent();
                intent.setAction("asdf.SecondActivity");
                startActivity(intent);
            }
        });
    }
}
  
  

三、应用场景

显式Intent :通过指定Intent组件名称来实现的,一般用在知道目标组件名称的前提下,一般是相同的应用程序内部实现的。
隐式Intent:    通过Intent Filter来实现的,它一半用在没有明确指出目标组件名称的前提下,一般用于在不同的应用程序之间。

总结:对于显式Intent, Android不需要自阿去做解析,因为目标组件很明确。Android需要解析的是隐式Intent,通过解析,将Intent映射给可以处理该Intent的Activity,Service等。Intent的解析机制主要是通过查找已经注册在AndroidManifest.xml中的所有IntentFilter以及其中定义的Intent, 最终找到 Intent.