每次通过startActivity访问视图时运行OnChildaded方法的Android

每次通过startActivity访问视图时运行OnChildaded方法的Android,android,Android,我想知道为什么每次我通过启动活动访问视图时,我的android应用程序都会运行fireBase OnChildaded。我只想从fireBase数据库读取一次,从那时起,我使用onResume用数据库中的最后一个条目(如果添加了任何条目)填充列表 但是,每次我使用StartActivity访问视图时,它都会运行OnChildaded。这意味着当我按下后退按钮进入这个视图时,它不会发生 每次用户从主屏幕返回此页面时,都必须从数据库中重新填充列表,这会大大降低我的应用程序的速度 下面是一个视频,演示

我想知道为什么每次我通过启动活动访问视图时,我的android应用程序都会运行fireBase OnChildaded。我只想从fireBase数据库读取一次,从那时起,我使用onResume用数据库中的最后一个条目(如果添加了任何条目)填充列表

但是,每次我使用StartActivity访问视图时,它都会运行OnChildaded。这意味着当我按下后退按钮进入这个视图时,它不会发生

每次用户从主屏幕返回此页面时,都必须从数据库中重新填充列表,这会大大降低我的应用程序的速度

下面是一个视频,演示了当我按back键进入屏幕时,与从主屏幕进入屏幕并按下“夜总会”卡相比,它的速度快了多少:

我的onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // start tracing to "/sdcard/calc.trace"
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nightclub_search);

    // Map and camera Positions
    // Retrieve location and camera position from saved instance state.
    if (savedInstanceState != null) {
        mLastKnownLocation = savedInstanceState.getParcelable(KEY_LOCATION);
        mCameraPosition = savedInstanceState.getParcelable(KEY_CAMERA_POSITION);
    }

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    // Build the Play services client for use by the Fused Location Provider and the Places API.
    // Use the addApi() method to request the Google Places API and the Fused Location Provider.
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */,
                    this /* OnConnectionFailedListener */)
            .addConnectionCallbacks(this)
            .addApi(LocationServices.API)
            .build();
    mGoogleApiClient.connect();

    // List View
    listView = (ListView) findViewById(R.id.venueList);
    listView.setOnItemClickListener(this);
    venueList = new ArrayList<>();
    arrayAdapter = new ArrayAdapter<>(nightclub_search.this, R.layout.list_layout, venueList);

    // Fill the list view from the fireBase
    fillListView();

    // Button
    Button addClub = (Button) findViewById(R.id.addClub);
    addClub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(nightclub_search.this, venue_add.class);
            startActivity(i);
        }
    });
}
最后,这是我从firebase填充列表的方式,该列表在onCreate中调用(其他任何地方都不调用):


尝试在活动的清单中设置启动模式“singleTask”,以便在初始化活动时只调用onCreate一次,并且在所有调用之后都将调用“onNewIntent”方法,直到在活动后堆栈中未创建新实例。

启动活动(意图)方法创建一个新的活动实例,除非您为其设置了一些标志。要通过意图恢复现有活动实例,请尝试使用以下方法:

Intent i = new Intent(nightclub_search.this, venue_add.class);
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
或者将其添加到清单上的活动标记中:

<activity
    android:name="com.company.ActivityName"
    android:launchMode="singleTask">
</activity>


不幸的是,当从主屏幕进入视图时,它仍然会完全重建列表。我认为这与数据库引用侦听器有关。onCreate中的其他内容没有激活(如加载对话框),因此每次从“开始活动”输入onchildaded时,它必须只是从我的引用侦听器调用onchildaded。我将更新问题以反映这些新发现。感谢您的回复,不幸的是,这两项工作都没有。我认为它不是运行onCreate,而是在每次通过start活动访问视图时(但不是在按返回活动时)调用firebase“onChildaded”。
Intent i = new Intent(nightclub_search.this, venue_add.class);
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
<activity
    android:name="com.company.ActivityName"
    android:launchMode="singleTask">
</activity>