java - 应用程序在加载 xml 布局文件的主线程中做太多工作
问题描述
我正在制作一个 9x9 数独网格,其中 81 个单元格中的每一个本身就是一个 3x3 网格。单个单元格看起来像这样:
1 2 3
4 5 6
7 8 9
每个数字代表该单元格的铅笔注释。我有一个名为 cell_layout.xml 的文件,代表这种 3x3 排列。
我已经能够生成网格,并且代码有效:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.solver_principal);
TableLayout sudokuGrid = (TableLayout) findViewById(R.id.sudokuGrid);
sudokuGrid.setShrinkAllColumns(true);
sudokuGrid.setStretchAllColumns(true);
TableRow.LayoutParams paramsRow = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
TableLayout.LayoutParams paramsLayout = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT);
for(int i = 0; i < 9; ++i)
{
TableRow tableRow = new TableRow(SolverActivity.this);
tableRow.setDividerDrawable(getResources().getDrawable(R.drawable.column_divider));
tableRow.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
for(int j = 0; j < 9; ++j)
{
View cell = getLayoutInflater().inflate(R.layout.cell_layout, sudokuGrid, false);
cell.setLayoutParams(paramsRow);
tableRow.addView(cell);
}
tableRow.setLayoutParams(paramsLayout);
sudokuGrid.addView(tableRow);
}
}
上面的代码只是将所需布局的 81 倍膨胀到 TableLayout 中。
它有效,那么你的问题是什么?
创建活动所需的时间太长。即使我只使用一排网格进行测试,该方法也需要很长时间才能将所需布局膨胀多次。
我得到:
后台并发复制GC释放131244(9MB)个AllocSpace对象,0(0B)个LOS对象,24%空闲,74MB/98MB,暂停127us共444.411ms
跳过了 153 帧!应用程序可能在其主线程上做了太多工作。
任何人都可以针对我的情况提出更好的方法吗?生成 81 次 3x3 网格的工作量真的太多了吗?
谢谢
编辑
所以我现在尝试手动写下xml文件。我认为不必多次膨胀 xml 会改善事情,但事实并非如此。仅通过加载 xml 文件,我仍然遇到相同的问题“主线程中的工作太多”。
<TableLayout
android:id="@+id/sudokuGrid"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:divider="@drawable/row_divider"
android:showDividers="middle"
android:shrinkColumns="*"
android:stretchColumns="*"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/solverTitle">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@drawable/column_divider"
android:showDividers="middle">
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include
layout="@layout/cell_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
</TableLayout>
这是我的单元格布局,以防有人想尝试一下。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/cellValue"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pencilOne"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="1"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilFour"
app:layout_constraintEnd_toStartOf="@+id/pencilTwo"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pencilTwo"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="2"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilFive"
app:layout_constraintEnd_toStartOf="@+id/pencilThree"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilOne"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pencilThree"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="3"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilSix"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilTwo"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pencilFour"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="4"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilSeven"
app:layout_constraintEnd_toStartOf="@+id/pencilFive"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pencilOne" />
<TextView
android:id="@+id/pencilSix"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="6"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilNine"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilFive"
app:layout_constraintTop_toBottomOf="@+id/pencilThree" />
<TextView
android:id="@+id/pencilSeven"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="7"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/pencilEight"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pencilFour" />
<TextView
android:id="@+id/pencilEight"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="8"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/pencilNine"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilSeven"
app:layout_constraintTop_toBottomOf="@+id/pencilFive" />
<TextView
android:id="@+id/pencilNine"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="9"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilEight"
app:layout_constraintTop_toBottomOf="@+id/pencilSix" />
<TextView
android:id="@+id/pencilFive"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:text="5"
android:textSize="10sp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/pencilEight"
app:layout_constraintEnd_toStartOf="@+id/pencilSix"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pencilFour"
app:layout_constraintTop_toBottomOf="@+id/pencilTwo" />
</android.support.constraint.ConstraintLayout>
解决方案
有关更多信息,Application doing too much work in main thread
请参阅此帖子
https://stackoverflow.com/a/21126690/7666442
你应该 RecyclerView
使用GridLayoutManager
按照这个步骤
首先
dependencies
在您的Build.Gradle
文件中添加以下内容以使用RecyclerView
implementation 'com.google.android.material:material:1.0.0-beta01'
注意:如果您已经添加 了,则无需添加额外dependencies
的RecyclerView
dependencies
com.google.android.material:material
现在添加
RecyclerView
您的活动文件布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".JavaActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:id="@+id/myRecyclerView"
android:layout_height="wrap_content" />
</LinearLayout>
现在您需要使用
GridLayoutManager
将列表项显示为网格
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class JavaActivity extends AppCompatActivity {
RecyclerView myRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java);
myRecyclerView = findViewById(R.id.myRecyclerView);
GridLayoutManager gridLayoutManager = new GridLayoutManager(JavaActivity.this, 3);
myRecyclerView.setLayoutManager(gridLayoutManager);
myRecyclerView.setAdapter(new MyAdapter(this));
}
}
像这样创建一个
MyAdapter
类
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
public MyAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.row_list_item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tvText.setText(String.valueOf(position + 1));
if (position % 2 == 0) {
holder.imgBanner.setBackgroundColor(Color.RED);
} else {
holder.imgBanner.setBackgroundColor(Color.GREEN);
}
}
@Override
public int getItemCount() {
return 81;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imgBanner;
TextView tvText;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
imgBanner = itemView.findViewById(R.id.imgBanner);
tvText = itemView.findViewById(R.id.tvText);
}
}
}
row_list_item 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical">
<ImageView
android:id="@+id/imgBanner"
android:layout_width="100dp"
android:layout_height="100dp"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@android:color/white"
android:textSize="15sp"
android:textStyle="bold" />
</RelativeLayout>
输出
推荐阅读
- amazon-web-services - 在带有子目录的aws s3路径中选择随机100个文件,然后将它们复制到另一个文件夹
- javascript - Firestore 规则嵌套的“获取”函数
- python - PyCharm IDE 找不到 RPI.GPIO 模块
- cython - 由 Cython 错误重定位地址 0x0 在“.data”部分生成的编译 C 代码期间出错
- java - 如何为我的 kafka 消费者使用现有的 avro 模式?
- google-apps-script - 从 Google 表格中的一系列单元格生成 PDF 并通过电子邮件发送
- android - 无法运行 Android Espresso 测试。该项目使用 Hilt 依赖注入和导航组件
- google-sheets - 为什么 Index + Match + Maxifs 在周末不起作用(日期名称)
- java - Java Spring @autowire 在测试类中不起作用
- python - 如何根据两个条件在python中合并?