安卓入门系列-08四大组件之Activity
Activity详解什么是ActivityAndroid提供的四大组件(activity、service、contentprovider、broadcast receiver)之一。它是一个界面的载体(内含各种控件),不妨理解为web开发中的html文件(含各种标签)。当然,Activity远远没有这么简单,不妨看一下源代码。作为一个继承的类,它的源码达到了7000行,这是由于Activi...
·
Activity详解
- 什么是Activity
- Android提供的四大组件(activity、service、contentprovider、broadcast receiver)之一。它是一个界面的载体(内含各种控件),不妨理解为web开发中的html文件(含各种标签)。当然,Activity远远没有这么简单,不妨看一下源代码。作为一个继承的类,它的源码达到了7000行,这是由于Activity封装了很多方法给开发者使用。当然,初学者不需要知道这些底层的东西。
- Activity的生命周期
- 这是官方参考文档里的图。
- 不难看出,当这个activity第一次创建出现时是oncreate方法调用了,直到这个Activity被销毁。当然,我们一般大量的刷新类型的业务处理是放在onresume这个方法实现。(因为create只会在activity创建时调用一次,除非销毁才会再次调用,这是开销比较大的,一般不这么做)
- 这是官方参考文档里的图。
- 下面代码尝试调用所有的方法,明确生命周期。
- 代码测试
-
package com.zc.helloworld; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button btn; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("info","MainActivity onCreate()"); } @Override protected void onStart() { super.onStart(); Log.e("info","MainActivity onStart()"); } @Override protected void onResume() { super.onResume(); Log.e("info","MainActivity onResume()"); } @Override protected void onPause() { super.onPause(); Log.e("info", "MainActivity onPause()"); } @Override protected void onStop() { super.onStop(); Log.e("info", "MainActivity onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.e("info","MainActivity onDestroy()"); } @Override protected void onRestart() { super.onRestart(); Log.e("info","MainActivity onRestart()"); } }
-
- 演示结果
- 当初次打开App时
- 当home键最小化App时
- 当回到未被后台销毁的APP时
- 当退出且关闭App时
- 从上面的情况,不难看出生命周期的运转过程。
- 代码测试
- 常用的Activity
- 在开发中,不可避免要写很多的Activity,但是为了方便,谷歌已经封装了很多实用的牵涉底层的Activity。
- 代码测试
-
package com.zc.helloworld; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button btn1,btn2,btn3,btn4; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); btn3 = (Button) findViewById(R.id.btn3); btn4 = (Button) findViewById(R.id.btn4); context = this; btn1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); }}); btn2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivity(intent); }}); btn3.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT,"Hello World!"); startActivity(intent); }}); btn4.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("tel:10086")); startActivity(intent); }}); } }
-
- 演示结果
- Activity之间的数据交互
- 一般用intent传递。(内存数据)
- 代码测试
- MainActivity.java(将这个Activity的textview数据传到下一个Activity)
-
package com.zc.helloworld; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private Button btn1; private TextView tv; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; btn1 = (Button) findViewById(R.id.btn1); tv = (TextView) findViewById(R.id.tv1); btn1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(context,Main2Activity.class); String data = (String) tv.getText(); intent.putExtra("data",data); startActivity(intent); }}); } }
-
- MainActivity2.java
-
package com.zc.helloworld; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class Main2Activity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); tv = (TextView) findViewById(R.id.tv2); Intent intent = getIntent(); if(intent!=null){ String data = intent.getStringExtra("data"); tv.setText(data); } } }
-
- MainActivity.java(将这个Activity的textview数据传到下一个Activity)
- 演示结果
- 当然,更多类型,更加复杂的数据可以用Bundle绑定一起传递。
- 补充说明
- 实际开发中必须要处理好Activity和Context的关联。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献8条内容
所有评论(0)