如何减少Activity的加载时间?

Kou*_*lya 5 xml performance android android-activity

我正在 Activity 的 onCreate 中执行以下操作,

if(condition satisfied){
    imageView.setImage(passing view to resize);
    imageview.setVisibility(View.VISIBLE);
}
else
    imageview.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

像下面这样调整大小,

Bitmap bmSource = BitmapFactory.decodeResource(context.getResources(), res);
Bitmap bmThumbnail;
bmThumbnail = getResizedBitmap(bmSource, getScreenWidth() / x, (getScreenWidth() / y));
Drawable drawable = new BitmapDrawable(context.getResources(), bmThumbnail);
b.setBackground(drawable);
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我提到了一个视图。但在实际代码中,我有多个视图此活动(视为 A)用作以下三个,

  1. 拨出电话屏幕
  2. 拨出电话已连接屏幕
  3. 来电连接屏幕。

以便我根据此更改 Activity。使用图像作为通话所需的扬声器、静音、录音等。

  1. 拨出电话和呼叫连接屏幕,

a) 对拨出电话的显示进行更改。

b) 一旦收到来自其他人的呼叫接受立即为呼叫连接屏幕进行屏幕更改

c) 屏幕更改完成后,将启动计时器以进行呼叫。

  1. 来电已接通,

a) 为了显示来电屏幕,使用了不同的活动。

b) 一旦用户接听电话,然后移动到活动 A。

c) 所以在 Activity A 中,最初会做一些图像设置。一旦我得到了对呼叫连接屏幕的接受图像更改的响应。

这就是整个过程。现在来解释一下这个问题,

我已经提到,在这两种情况下,呼叫连接屏幕的更改都将在活动 A 中完成。在第一种情况下,因为已经在同一屏幕中的初始图像设置将先前加载,一旦得到响应,呼叫连接屏幕的更改将完成。计时器将启动。这里没问题。

问题是,在接听来电时,它会转到活动 A 和初始图像设置。一旦得到接受响应将改变屏幕调用连接的屏幕和计时器启动。在这里加载初始图像设置需要时间。因此,延迟一秒启动计时器导致 A 人和 B 人的时间不同

并非所有设备都会出现此问题。在 Android 版本 8 中,我遇到了这个问题,而不是在上面的版本中。

我所说的初始图像设置是设置图像视图的可见性和设置图像。

我已经尝试过,而不是使用位图使用毕加索来调整大小和设置图像。这样我就可以减少一些 0.20 到 0.25 秒。但图像扩展不正确。在上面的奥利奥也减少了一些 0.x 秒。但也没有解决问题。

同样在日志中,我已经看到了这个

PowerKeeper.Event: notifyActivityLaunchTime: com.package.ex/com.package.ExampleActivity totalTime: 1200
Run Code Online (Sandbox Code Playgroud)

上面提到的 1200 是启动我的 Activity 所用的毫秒数??有时会收到 1212、1400

我的应用程序在 O 上运行完美。但奥利奥及以下需要一些时间来加载,这会影响通话时间。它真的很糟糕。那我能怎么办??

那么如何减少在 Activity 中进行 UI 更改所花费的时间???

如果有人在阅读我的整个问题时遇到困难,请查看此简短说明。

简短解释:考虑您正在使用呼叫应用程序(您的设备是奥利奥或低于奥利奥)。并且您收到了来电。你点击答案。连接成功后屏幕会发生变化。如果该屏幕需要一些时间为您加载,而另一端的人在您之前看到屏幕怎么办?您和对方的通话时长会有所不同。所以这就是我的问题

注意:仅在奥利奥及以下版本中遇到此问题。

下面是我的 Activity A 布局。(用作呼叫连接屏幕和拨出呼叫屏幕)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/call_page"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/connected_call_background"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true">

    <RelativeLayout
        android:id="@+id/top_bar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:paddingLeft="@dimen/activity_vertical_margin"
        android:paddingTop="10dp"
        android:paddingRight="@dimen/activity_vertical_margin"/>

    <ImageView
        android:id="@+id/plain_white_bg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

    <LinearLayout

        android:id="@+id/call_swap_merge_transfer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/center_view"
        android:background="#297B88"
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        android:visibility="invisible"
        android:weightSum="3">

        <ImageView
            android:id="@+id/swap"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="swapCall" />

        <ImageView
            android:id="@+id/merge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="mergeCall" />

        <ImageView
            android:id="@+id/transfer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="attendedCallTransfer" />
    </LinearLayout>

    <ImageView
        android:id="@+id/record_call"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/center_view"
        android:layout_centerHorizontal="true"
        android:onClick="callRecord"
        android:visibility="visible" />

    <View
        android:id="@+id/center_view"
        android:layout_width="match_parent"
        android:layout_height="0.01dp"
        android:layout_centerInParent="true" />

    <ImageView
        android:id="@+id/after_call_connected_background"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/center_view"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_dialpad"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/conference_background"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_dialpad"
        android:visibility="invisible" />

    <RelativeLayout
        android:id="@+id/connected_call_root_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:paddingTop="20dp"
        android:paddingStart="40dp"
        android:paddingLeft="40dp"
        android:paddingEnd="40dp"
        android:paddingRight="40dp"
        android:paddingBottom="60dp">

        <TextView
            android:id="@+id/dialling_status"
            style="@style/Base.TextAppearance.AppCompat.Small.Inverse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="@string/dialling"
            android:textColor="@color/white"
            android:textSize="15.5sp" />

        <TextView
            android:id="@+id/call_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:text=""
            android:textColor="@color/white" />

        <ImageView
            android:id="@+id/hangupoutgoingcall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:onClick="hangUpCall" />

        <ImageView
            android:id="@+id/dialerpadbutton_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true"
            android:clickable="false"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/callspeakerbutton_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentBottom="true"
            android:onClick="speakerOn"
            android:visibility="invisible" />

        <View
            android:id="@+id/hangup_view"
            android:layout_width="match_parent"
            android:layout_height=".01dp"
            android:layout_above="@+id/hangupoutgoingcall"
            android:layout_margin="2dp"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/dialerpadbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/hangup_view"
            android:layout_centerHorizontal="true"
            android:layout_margin="10dp"
            android:clickable="false"
            android:onClick="showKeypad"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/callspeakerbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/hangup_view"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_margin="10dp"
            android:onClick="speakerOn"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/callmutebutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/hangup_view"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_margin="10dp"
            android:clickable="false"
            android:onClick="muteOn"
            android:visibility="invisible" />

        <RelativeLayout
            android:id="@+id/connected_call_keypad_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/dialerpadbutton"
            android:layout_marginLeft="-25dp"
            android:layout_marginRight="-25dp">

            <ImageView
                android:id="@+id/bts1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentBottom="true"
                android:layout_toLeftOf="@id/btzoutgoing" />

            <ImageView
                android:id="@+id/btzoutgoing"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <ImageView
                android:id="@+id/bth1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:layout_toRightOf="@id/btzoutgoing" />

            <ImageView
                android:id="@+id/bt71"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bts1"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_toLeftOf="@id/bt81" />

            <ImageView
                android:id="@+id/bt81"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/btzoutgoing"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <ImageView
                android:id="@+id/bt91"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bth1"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_toRightOf="@id/bt81" />

            <ImageView
                android:id="@+id/bt41"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt71"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_toLeftOf="@id/bt51" />

            <ImageView
                android:id="@+id/bt51"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt81"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <ImageView
                android:id="@+id/bt61"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt91"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_toRightOf="@id/bt51" />

            <ImageView
                android:id="@+id/bt11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt41"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_toLeftOf="@id/bt21" />

            <ImageView
                android:id="@+id/bt21"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt51"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp" />

            <ImageView
                android:id="@+id/bt31"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/bt61"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_toRightOf="@id/bt21" />

            <View
                android:id="@+id/view2"
                android:layout_width="match_parent"
                android:layout_height="0.005dp"
                android:layout_above="@id/bt21"
                android:background="#4B4B4B"
                android:visibility="invisible" />

            <EditText
                android:id="@+id/editText1aaa"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/buttonoutgoing"
                android:layout_alignBottom="@+id/buttonoutgoing"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_centerInParent="true"
                android:background="#00000000"
                android:ellipsize="start"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:foregroundGravity="center"
                android:gravity="center"
                android:hint=""
                android:paddingRight="10dp"
                android:textColor="@color/black80"
                android:textCursorDrawable="@null" />

            <EditText
                android:id="@+id/contact_nameforoutgoing"
                android:layout_width="wrap_content"
                android:layout_height="200dp"
                android:layout_above="@id/view2"
                android:layout_alignTop="@+id/buttonoutgoing"
                android:layout_alignBottom="@+id/buttonoutgoing"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:background="#00000000"
                android:ellipsize="start"
                android:enabled="false"
                android:focusableInTouchMode="true"
                android:foregroundGravity="center"
                android:gravity="center"
                android:hint=""
                android:textColor="@color/black80"
                android:textCursorDrawable="@null"
                android:textSize="20dp" />

            <Button
                android:id="@+id/buttonoutgoing"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/view2"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_marginRight="25dp"
                android:layout_toEndOf="@+id/editText1aaa"
                android:layout_toRightOf="@+id/editText1aaa"
                android:background="#00000000"
                android:onClick="removeNumberFromOutgoingNumber"
                android:textColor="#fff"
                android:visibility="invisible" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/add_hold_transfer_record_holder"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/dialerpadbutton"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="25dp"
            android:paddingBottom="10dp">

            <ImageView
                android:id="@+id/hold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:clickable="false"
                android:enabled="false"
                android:onClick="holdOn" />

            <ImageView
                android:id="@+id/call_transfer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:enabled="false"
                android:onClick="unAttendedCallTransfer" />

            <ImageView
                android:id="@+id/addcall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentBottom="true"
                android:enabled="false"
                android:gravity="bottom"
                android:onClick="addCall"
                android:textColor="@color/white" />

            <ImageView
                android:id="@+id/record_call_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:onClick="callRecord"
                android:visibility="invisible" />

        </RelativeLayout>
    </RelativeLayout>

    <ListView
        android:id="@+id/listview_status"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/top_bar"
        android:layout_centerInParent="tr

Sur*_*nav 1

我有几个建议:

  1. 使用ConstraintLayout,您的 xml 文件包含许多视图,并且您正在使用RelativeLayoutorLinearLayout并且这些视图以嵌套方式使用,因此这种布局嵌套可能会影响性能。
  2. 另一件事是,在使用 ConstraintLayout 时,layout_constraintDimensionRatio您应该ImageView根据要加载的图像的长宽比来设置 imageView 的高度或宽度。因此,您需要固定高度或宽度,另一件事将通过纵横比来计算。

我只是分享部分ImageView代码,它会是这样的:

<androidx.constraintlayout.widget.ConstraintLayout
        
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <ImageView
        
        android:layout_width="0dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintDimensionRatio="H,16:9"  
        android:layout_height="0dp"> </androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

请注意:app:layout_constraintDimensionRatio="H,16:9"

另外,使用 glide 加载图像。

  1. 您应该使用片段,而不是启动新活动,我们已经看到片段加载速度比启动新活动更快。

尝试上述操作,如果问题仍然存在,请告诉我。