intent翻譯為中文的意思是意圖,目的。它的作用就是調用某個組件去做某一個事情。比如從當前運行的activity跳轉到另一個activity,當前activity要啟動一個service或啟動一個broadcastreceive(廣播接收器),此時就需要用intent來完成。簡單的說intent是各個組件的一個橋梁。既然充當了橋梁的角色,那么intent就該可以傳遞數據,把當前的組件的數據傳遞到另一個組件去使用,那么intent是如何來傳遞值的呢?通過Intent類提供的setData()和putExtra()方法傳遞。前一個參數是uri,是個標識比如一個文件的路徑等。后一個參數可以是值也可以是對象,以鍵值對的形式傳遞。
ActivityA:
Intent intent=new Intent();
intent.setClass(ActivityA.this,ActivityB.class);
intent.putExtra("extra", "Welcome to ...");
startActivity(intent);
ActivityB:
Intent intent=getIntent();
String stringValue=intent.getStringExtra("extra");
如果把stringValue的值改變,ActivityA中extra所對應的值不會變。
以上的列子是通過putExtra()方法傳值的,現在看看對象的傳遞,是怎么傳遞的?
ActivityA:
Intent intent=new Intent();
intent.setClass(ActivityA.this,ActivityB.class);
Student s=new Student("shao",20);
intent.putSerializable("STUDENT", s);
startActivity(intent);
ActivityB:
Intent intent=getIntent();
Student s=intent.getSerializable("STUDENT");
現在如果把ActivityB中得到的Student對象s ,改變一個值,如s.setName("yang");那么ActivityA里的s會變嗎?不會變,因為intent傳遞對象時,傳遞的是一個副本(深拷貝)。
所以在android中,intent進行數據傳遞時,基本數據類型和對象傳遞的都是副本,改變傳遞過來的值,不會改變原來的值。注意的是在進行對象傳遞的時候,該對象所對應的類要實現Serializable接口或Parcelable接口。
