Android Studio——boolean android.app.Activity.isFinishing()函数使用

Activity Finish 问题解析
本文探讨了Android开发中Activity在finish状态下的常见问题,包括如何避免在Activity已finish时仍接收广播导致的bug,以及如何处理finish状态下发送消息引发的问题。

原文转载:http://blog.youkuaiyun.com/fuuckwtu/article/details/7022487


这个函数注释:

Check to see whether this activity is in the process of finishing, either because you called finish on it or someone else has requested that it finished. This is often used in onPause to determine whether the activity is simply pausing or completely finishing.

Returns:
If the activity is finishing, returns true; else returns false.
See Also:
finish
判断this Activity是否finish,自己调用或者某种因素请求finish,经常用在onPause函数里面


这次项目中,遇到这个问题,一个activity在finish时候,还有收到广播,结果导致bug

在广播接收器中先判断一下比较保险。或者在onDestroy里面注销广播

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Log.d(TAG, intent.toString());    
            final String action = intent.getAction();
            
            if(isFinishing())
            {

                  。。。。。。。              

                return;

            }

}


还有遇到一个问题,在activity  finish时候,这时候handler.sendMessage,这时候也会导致bug

这时候最好在finish函数里面removeAllCallbackAndMessage(this)


### androidx.fragment.app.FragmentActivity 使用指南 #### 基本概念 `androidx.fragment.app.FragmentActivity` 是 AndroidX 库中的一个基类,用于承载和管理 `Fragment`。它提供了对 `Fragment` 框架的支持,允许在一个 Activity 中动态添加、替换和移除 `Fragment`。 #### 依赖添加 要使用 `FragmentActivity`,需要在项目的 `build.gradle` 文件中添加 AndroidX Fragment 库的依赖: ```groovy implementation 'androidx.fragment:fragment:1.3.6' ``` #### 创建 FragmentActivity 子类 创建一个继承自 `FragmentActivity` 的子类,重写 `onCreate` 方法来设置布局和初始化操作: ```java import androidx.fragment.app.FragmentActivity; import android.os.Bundle; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } ``` #### 管理 Fragment 在 `FragmentActivity` 中管理 `Fragment` 通常涉及到添加、替换和移除操作。以下是一个简单的示例,展示如何在 `FragmentActivity` 中添加一个 `Fragment`: ```java import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; // 在 onCreate 方法中添加 Fragment Fragment fragment = new MyFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.add(R.id.fragment_container, fragment); transaction.commit(); ``` ### 与 Toolbar 结合使用的方法 #### 布局文件中添加 Toolbar 在布局文件中添加 `Toolbar` 控件: ```xml <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> ``` #### 在 FragmentActivity 中设置 Toolbar 在 `FragmentActivity` 的 `onCreate` 方法中设置 `Toolbar`: ```java import androidx.appcompat.widget.Toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); } ``` #### 处理 Toolbar 菜单项点击事件 可以为 `Toolbar` 设置菜单项点击事件监听器: ```java toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.item_exp1: // 处理点击事件 return true; case R.id.item_exp2: // 处理点击事件 return true; // 其他菜单项 default: return false; } } }); // 加载菜单资源 toolbar.inflateMenu(R.menu.settings); ``` ### 常见问题及解决方案 #### 问题1:Toolbar 显示异常 **解决方案**:检查布局文件中 `Toolbar` 的属性设置,确保 `android:layout_width` 和 `android:layout_height` 等属性设置正确。同时,检查 `android:background` 和 `android:theme` 等属性是否与应用的主题一致。 #### 问题2:Fragment 无法正确显示 **解决方案**:检查 `Fragment` 的布局文件和代码逻辑,确保 `Fragment` 的 `onCreateView` 方法正确返回视图。同时,检查 `FragmentTransaction` 的操作是否正确,例如 `commit` 方法是否被调用。 #### 问题3:菜单项点击事件无响应 **解决方案**:检查菜单项的 `id` 是否与布局文件和代码中的一致,确保 `setOnMenuItemClickListener` 方法正确设置,并且在点击事件处理逻辑中返回 `true` 表示事件已处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值