2

別のページにつながるボタンがあります。そして、それをクリックするたびに、次の情報コードが logcat に表示されます:

12-07 16:09:45.073: I/ActivityManager(273): Displayed com.example.prva/.button: +1s764ms

もちろん、秒とミリ秒は1〜3秒の間で毎回異なります。問題は、そのボタンがそのページを開くのに時間がかかることに気付いたことです。ある種の一時停止などがありますが、これは、logcat で見つけた関連する唯一のものであり、それに接続できます。このボタンの動作が「遅い」のはなぜですか?

ボタンのコードは次のとおりです。

   package com.example.prva;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Meni_Splash extends Activity{  


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

        Button btnv = (Button) findViewById(R.id.buttonv);
        btnv.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startActivity(new Intent(Meni_Splash.this, button.class));              
            }
        });         
    }
}

そして、これは開くクラスです:

package com.example.prva;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;

public class button extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.button);

        //Button click sound
        final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.radio1);
        final MediaPlayer MPRadio2 = MediaPlayer.create(this, R.raw.radio2);
        final MediaPlayer MPRadio3 = MediaPlayer.create(this, R.raw.radio3);

        final RadioButton rb1, rb2, rb3;        

        rb1 = (RadioButton) findViewById(R.id.radio1);
        rb2 = (RadioButton) findViewById(R.id.radio2);
        rb3 = (RadioButton) findViewById(R.id.radio3);


        Button btn = (Button) findViewById(R.id.buttonplay);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub      
                if(rb1.isChecked())
                {
                MPRadio1.start();
                }
            else
                {
                if(rb2.isChecked())
                {
                    MPRadio2.start();
                }
                    else
                    {
                        if(rb3.isChecked())
                        {
                        MPRadio3.start();
                    }
                }   
                }
            }
        }

    );}}

これらの活動で何がそんなに遅くなるのかわからない?

4

1 に答える 1

2

正直に言うと、あなたのコードはかなりまともに見えます。何が原因で初期化が遅いのか完全にはわかりません。

しかし、注目すべき領域が 2 つあります。

最初の可能性が最も高いのは、レイアウトの読み込みです。

    setContentView(R.layout.button);

ただし、レイアウトが複雑になるとは思いません。しかし、ページ上に多数のネストされたビュー (他の線形レイアウト内の線形レイアウト)、または一般的に多数のビュー (テキストビューなど) がある場合、レイアウトを「膨張」させるのに時間がかかる可能性があります。

または、可能性は低いですが、MediaPlayer.create の読み込みにはかなりの時間がかかります。私がこれを提案する理由は、以前に使用したことがないため、どのように機能するのかわからないからです.

    //Button click sound
    final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.radio1);
    final MediaPlayer MPRadio2 = MediaPlayer.create(this, R.raw.radio2);
    final MediaPlayer MPRadio3 = MediaPlayer.create(this, R.raw.radio3);

最善の方法は、DDMS プロファイラーでプロファイリングすることです。または、その周りにタイマーを置き、結果を logcat に出力します。

また、簡単に言うと、読み込みはわずか 2 ~ 3 秒ですか? そして、それがやろうとしていることは本当に悪いことなのでしょうか?

于 2012-12-07T22:42:53.213 に答える