Activity是安卓开发的四大组件之一,是咱们开发中最常见到一个组件。他是存在生命周期的。
在应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。
典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW 的intent,以及一个表示这个人的URI。
与之有关系的一个类叫IntentFilter。相对于intent 是一个有效的做某事的请求,一个intentfilter 则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。一个activity 如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表示一个人的URI。IntentFilter 需要在AndroidManifest.xml 中定义。通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:
A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;
B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
AndroidManifest 文件中含有如下过滤器的Activity组件为默认启动类当程序启动时系统自动调用它
既然经常用到何不创建一个基类。来统一管理呢。
public abstract class BaseActivity extends AppCompatActivity { private InputMethodManager inputMethodManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initInputManager(); } private void initInputManager() { inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); } /** * 初始化方法 */ protected abstract void init(); /** * 初始化view方法 */ protected abstract void initview(); /** * 加载数据 */ public abstract void initdata(); /** * 行 */ protected abstract void initclick(); @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStart() { // TODO onStart super.onStart(); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { try { super.onRestoreInstanceState(savedInstanceState); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } savedInstanceState = null; } @SuppressLint("MissingSuperCall") @Override protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); } public int dip2px(float dpValue) { final float scale =getResources() .getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } public int px2dip(float pxValue) { final float scale = getResources() .getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } protected void showToast(String text,int duration){ Toast.makeText(this, text, duration).show(); } public static void showToast(Context context,String text){ Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } /** * @Time:2017-7-31: 下午6:00:42 * @author: JinPeng * @category 跳转方法 * @param cls 目标activity * @param intent 可传空 */ public void start(Class<?> cls,Intent intent){ if(intent==null){ intent=new Intent(); } intent.setClass(this, cls); startActivity(intent); } /** * 获取软键盘状态 */ public boolean isKeyBoardOpen() { if (inputMethodManager == null) return false; boolean isOpen = inputMethodManager.isActive();// isOpen若返回true,则表示输入法打开 return isOpen; } /** * 显示软键盘 */ public void showKeyBoard() { if (inputMethodManager == null) return; inputMethodManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);// show-input } /** * 隐藏软键盘 */ public void hideKeyBoard() { if (inputMethodManager == null || !(inputMethodManager.isActive())) return; try { View focusView = getCurrentFocus(); if (focusView != null) { inputMethodManager.hideSoftInputFromWindow(focusView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } else { } } catch (Exception e) { e.printStackTrace(); } }
这是我们比较常用的几个方法可以放在基类里。当然我们也可以在生命周期里做很多事,比如在进入一个页面开启软键盘,或者隐藏软键盘、在创建Activity时添加到application的一个集合里,或队列里,然后在Activity创建时从集合中删除,来方便管理Activity。