2

現在、音楽プレーヤーアプリケーションを作成しています。私の音楽ライブラリ アクティビティは、ViewPager4 つのページ/フラグメント (アルバム、アーティスト、すべての曲、プレイリストに対応) です。フラグメントのうちの 3 つは だけGridViewで、最後の 1 つはListView(すべての曲のフラグメント) です。アプリケーションを最初に起動すると、すべてが完全にスムーズに実行されます。ただし、ユーザーが (初めて) 再生する曲を選択するLinearLayoutと、現在再生中の曲に関する情報を含む (「再生中バー」と呼ばれる) が画面の下部に動的に作成されます。この時点で、すべてGridViewの と myListViewがスクロール時にかなり遅くなり始めます。奇妙なことに、ViewPager切り替え時に遅延が発生していないようです。Fragmentは以前と同じようにシームレスです。この問題は、ユーザーがプレーヤーを終了して再開した場合にも発生します (この場合、「現在再生中のバー」は既に表示されています)。

このすべてには、もう 1 つのかなり紛らわしい要因もあります。ユーザーがライブラリからアルバム、アーティスト、またはプレイリストを選択すると、そのListViewアーティスト/アルバム/プレイリストのすべての曲を含む新しいアクティビティが作成されます。「現在再生中のバー」もこのアクティビティに追加されますが、スローダウンはまったく発生しません。これにより、問題はライブラリアクティビティのViewPagerand/orに関連していると結論付けられます。Fragment

私はこれに完全に困惑しており、何か助けていただければ幸いです。

ライブラリ アクティビティの XML レイアウトは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"    
android:orientation="vertical"
android:id="@id/library_view"
>
<include layout="@layout/sd_error"/>
<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1.0" 
    />
<include layout="@layout/now_playing_bar"/>

そして、「現在再生中のバー」を作成するために使用されるコードは次のとおりです。

public static void updateNowPlaying(Activity a) 
{
    View nowPlayingView = a.findViewById(R.id.now_playing_bar);

    if (nowPlayingView == null)         
        return;

    try 
    {                                
        if (true && MusicUtils.sService != null && MusicUtils.sService.getAudioId() != -1) 
        {
            ImageView cover = (ImageView) nowPlayingView.findViewById(R.id.cover);
            TextView title = (TextView) nowPlayingView.findViewById(R.id.title);
            TextView artist = (TextView) nowPlayingView.findViewById(R.id.artist);

            title.setText(MusicUtils.sService.getTrackName());
            String artistName = MusicUtils.sService.getArtistName();                

            if (MediaStore.UNKNOWN_STRING.equals(artistName)) 
                artistName = a.getString(R.string.unknown_artist_name);

            artist.setText(artistName);

            cover.setImageURI(ContentUris.withAppendedId(
                 sArtworkUri, sService.getAlbumId()));

            if (cover.getDrawable() == null)
                cover.setImageResource(R.drawable.no_album_cover);                  

            nowPlayingView.setVisibility(View.VISIBLE);
            nowPlayingView.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View v) 
                {
                    Context c = v.getContext();
                    c.startActivity(new Intent(c, PlayerActivity.class));
                }
            });
            return;
        }
    } 
    catch (RemoteException ex) {}
    nowPlayingView.setVisibility(View.GONE);
}
4

1 に答える 1

1

android:layout_height="match_parent"では、遅延の理由はとがあったためであることがわかりましたandroid:layout_weight="1.0"。どうやら、重みをそのように設定している場合は、android:layout_height="0dp"パフォーマンスを向上させるために使用する必要があります。これが事実である理由はまったくわかりませんが、問題は解決しました。

于 2013-08-09T08:08:54.900 に答える