功能加载比Android中的布局更快

时间:2013-10-08 09:20:22

标签: android

我开发了一个Android应用程序来记录麦克风的声音,它有2个活动,在第一个活动中有一个图片,当用户触摸图片应用程序应该运行secound activty来录制声音,我的问题是通过触摸图片,第二个xml布局不会直到记录完成,我的意思是通过点击图片它开始记录完成后第二个布局出现。我希望通过点击图片的应用程序,它显示下一个布局,然后记录功能运行。这是我的代码,asynctask有用吗?

主:

public class Main extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageView micro = (ImageView) findViewById(R.id.imageView1);
    micro.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(Main.this, Record.class));
        }
    });
 }
}

记录:

public class Record extends Activity {

MediaPlayer mp = new MediaPlayer();
String name;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.record);

    record();

}

public void record() {
    .
    . 
    .
  }
}

4 个答案:

答案 0 :(得分:0)

我会说,将mp = new MediaPlayer();移到onCreate()

也不要忘记添加:

protected void onDestroy() {
  super.onDestroy();
  mediaPlayer.release();
}

答案 1 :(得分:0)

试试这种方式

     public class Record extends Activity {

            MediaPlayer mp;
            String name;

            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.record);
                mp = new MediaPlayer();
                 new LongOperation().execute();

            }
            private class LongOperation extends AsyncTask<Void, Void, Void> 
               {
                  @Override
                  protected void doInBackground(String... params) { 

                            runOnUiThread(new Runnable() {

                          @Override
                            public void run() {
                            // add code for record here.
                            }
                        });
                  }      
               }
        }

答案 2 :(得分:0)

只需将record()的电话转移到onWindowFocusChanged()方法

即可
public void onWindowFocusChanged (boolean hasFocus)
{
    record(); 
}

答案 3 :(得分:0)

在单独的(非UI)线程上调用record(),最好使用AsyncTask。 doInBackground将包含记录调用。