最近调试看别人的android的程序,我对android的整个机制有一些不大理解,主要是程序中有一个LauchActivity.java的文件,其代码如下:
package com.testCamera;import android.app.Activity;
import android.os.Bundle;public class LaunchActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
而项目中还有一个testCamera.java,其中部分代码如下:
package com.testCamera;import java.util.Timer;
import java.util.TimerTask;public class testCamera extends Activity {
/** Called when the activity is first created. */
private SurfaceView sfvCamera;
private SFHCamera sfhCamera;
private ImageView imgView;
private View centerView;
private TextView txtScanResult;
private Timer mTimer;
private MyTimerTask mTimerTask;
// 按照标准HVGA
final static int width = 480;
final static int height = 320;
int dstLeft, dstTop, dstWidth, dstHeight; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTitle("Android条码/二维码识别Demo-----hellogv");
imgView = (ImageView) this.findViewById(R.id.ImageView01);
centerView = (View) this.findViewById(R.id.centerView);
sfvCamera = (SurfaceView) this.findViewById(R.id.sfvCamera);
sfhCamera = new SFHCamera(sfvCamera.getHolder(), width, height,
previewCallback);
txtScanResult=(TextView)this.findViewById(R.id.txtScanResult);
// 初始化定时器
mTimer = new Timer();
mTimerTask = new MyTimerTask();
mTimer.schedule(mTimerTask, 0, 80);
}
后面部分省略。
我主要不解的是,两个文件代码同属于com.testCamera包,而我觉得onCreate应该是启动程序吧?那为什么两个文件中都写了onCreate(...)的代码呢?运行哪一个呢?而且删了还会运行出错,这个到底是为什么呢?
启动不是有一个onCreate(...)就可以了的吗?LauchActivity.java中的onCreate有什么用呢?
求解。。谢谢

解决方案 »

  1.   

    应该是右击项目名称运行,而不是说点击某一个java文件运行
      

  2.   

    ...onCreate是activity创建时的回调函数,一个工程可以有n个activity,但是同一时刻只会有一个activity在屏幕上显示。
    startactivity可以启动指定的activity
      

  3.   

    好好研究下activity生命周期就知道了
      

  4.   

    onCreate是activity创建时的回调函数,一个工程可以有n个activity,但是同一时刻只会有一个activity在屏幕上显示。
    startactivity可以启动指定的activity
      

  5.   

    详细步骤如下:第一次启动FristActivity时,它的执行顺序为:
         onCreate (Frist) - onStart (Frist) – onResume (Frist)启动SecondActivity时,它的执行顺序为:
         onPause (Frist) – onCreate (Second) – onStart (Second) - 
          onResume (Second) – onStop (Frist)
          说明:只有在第二个Activity启动完成后才会停止第一个Activity再次退回到FristActivity,它的执行顺序为:
        onPause (Second) – onRestart (Frist) -onStart (Frist) – onResume (Frist) – 
        onStop (Second) – onDestroy (Second) 退出FristActivity,它的执行顺序为:
        onPause (Frist) – onStop (Frist) – onDestroy (Frist) 
      

  6.   

    2楼正解。从名称上看,本程序应该是以LaunchActivity为启动程序的主入口,所以最先开始的是LaunchActivity里的onCreate().可以在每个onCreate()里添加Log.i()来追踪程序执行的过程。
      

  7.   

    恩,这个我知道,我用log跟踪了,发现运行的是testCamera.java里面的oncreate函数,但是我想知道launchactivity.java里面的oncreate既然写了,什么时候用到呢,log始终没有它的运行,删了它又会出错,所以困惑。
      

  8.   

    这个我知道,我是想知道这个项目的运行先后。以及什么时候调用了launchactivity.java里面的Oncreate,但我用log跟踪,却始终没有调用lauchactivity.java里面的oncreate,所以困惑。
      

  9.   

    两个类都继承了Activity,每个Activity 都有oncreate方法,看首先启动谁得看配置文件AndroidManifest.xml有              <action android:name="android.intent.action.MAIN" />的才会首先启动
      

  10.   

    LS正解,看下AndroidManifest.xml中的配置就知道了
      

  11.   

    2楼正解,要知道程序的入口,要查看manifest.xml,主要activity中有intent-filter标签的,关键这一句:<action android:name="android.intent.action.MAIN" />