使用activity中遇到的问题及解决办法

activity的使用

写在前文的话,最近的项目里用到的基本上全是Activity,在使用的时候会出现很多小问题,在这里总结一下。方便以后自己掌握,同时希望也能帮助到需要帮助的人


  • 我们都知道Activity是用户可视化的窗口,程序与用户交互都是依托于activity的,一旦程序中使用太多,我们在back时,很多时候不能得到我们想要的结果。这时我们可以操作的办法往往有各种各样的。

问题

  • 在多个activity进行跳转,当点击物理按键返回时(程序中无返回按钮),这时会发现之前的界面一直存在(某些界面我们只需显示一次,然后关闭)

解决办法之一

  • 深刻理解activity的启动模式(standard),在某些activity注册时设置相应的启动模式,可以得到部分解决
  • 如:扫描二维码进入显示界面
    现象:开始没有设置启动模式时,扫描进入,返回再次扫描进入,再返回进入,最终的结果是按返回键是程序一直在这两个界面之间跳转,进入几次就重复几次。
    原因:我们创建一个activity时默认standard方式启动
  • 解决办法:设置为singleTask方式启动,问题解决
<activity .ScanToDisplayActivity" 
            android:launchMode="singleTask"/>

问题

  • 在多个activity进行跳转,在某个界面动态注册广播返回时,提示没有解除绑定

解决办法

  • 深刻理解activity的生命周期,并不是每个生命周期方法在进入时都会调用的

    *问题产生原因:在onResume()方法中注册广播,在onDestroy()中解绑

protected void onResume() {

        // 注册广播

        receiver = new MyReceiver();

        filter.addAction(Constants.ACTION_ACCEPT);

        registerReceiver(receiver, filter);
}


@Override
protected void onDestroy() {
    // 解除绑定
    super.onDestroy();
    unregisterReceiver(receiver);
}
  • 解决办法:在onResume()方法中注册(同上),在onPause()方法中解除绑定

    protected void onPause() {

    super.onPause();
    unregisterReceiver(receiver);
    

    }
    解决收工,如果大家有什么高招请指教。

另附一关于activity四种启动模式的博客,多谢博主
(http://blog.csdn.net/knlnzhao/article/details/8005277)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 缺少依赖库:在 `build.gradle` 文件添加缺少的依赖库即可解决。例如,如果缺少了 `com.android.support:appcompat-v7` 库,则需要在 `dependencies` 代码块添加以下代码: ``` implementation 'com.android.support:appcompat-v7:28.0.0' ``` 2. 版本冲突:当使用的依赖库版本与其他库版本不兼容时,会导致版本冲突。可以通过在 `build.gradle` 文件指定统一的版本号来解决此问题。例如: ``` ext { // 统一版本号 supportLibraryVersion = '28.0.0' } dependencies { implementation "com.android.support:appcompat-v7:$supportLibraryVersion" implementation "com.android.support:recyclerview-v7:$supportLibraryVersion" implementation "com.android.support:design:$supportLibraryVersion" } ``` 3. 空指针异常:在访问对象或者调用方法时,如果对象为 null 会导致空指针异常。可以使用 `if` 判断语句或者在对象方法前加上 `?` 来避免空指针异常。例如: ``` // if 判断 if (object != null) { object.method(); } // 安全调用操作符 object?.method(); ``` 4. 内存泄漏:在使用一些长生命周期的对象时,需要注意避免内存泄漏。可以使用弱引用或者在合适的时机进行对象的释放来避免内存泄漏。例如,在使用 Handler 时,应该使用静态内部类和弱引用来避免内存泄漏: ``` private static class MyHandler extends Handler { private WeakReference<MainActivity> mActivity; public MyHandler(MainActivity activity) { mActivity = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { MainActivity activity = mActivity.get(); if (activity != null) { // do something } } } // 在 Activity 使用 private MyHandler mHandler = new MyHandler(this); @Override protected void onDestroy() { super.onDestroy(); mHandler.removeCallbacksAndMessages(null); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值