Activity基类

Activity是Android开发的关键组件,代表应用中的独立屏幕。它具有生命周期,并通过Intent与其他组件通信。Intent包含动作和数据,如VIEW、EDIT等。IntentFilter用于描述Activity能处理的Intent类型。在AndroidManifest中配置IntentFilter,系统会根据Intent找到合适的Activity启动。创建Activity基类可以统一管理常用方法,如生命周期回调中的软键盘控制和Activity集合管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值