目前,我的应用加载启动画面并保持这种状态。我认为我的主要问题是Android生命周期。我将启动页面作为onCreate,主要活动(从私人决赛开始,下面)也是onCreate,但我不认为这是正确的。此外,每个活动都在一个java文件中。它是否正确?如何让我的启动页面加载,自杀,然后加载我的主要活动?
这是我的MainActivity.java:
package com.deliveryfor;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread Timer = new Thread() {
public void run() {
try { sleep(3000);
startActivity (new Intent ("android.intent.action.SPLASH"));
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
finish();
}
}
};
Timer.start();
}
private final LatLng LOCATION_STATE = new LatLng(49.27645, -122.917587);
private final LatLng LOCATION_CITY = new LatLng(49.187500, -122.849000);
private final LatLng LOCATION_YOU = new LatLng(49.187500, -122.849000);
private GoogleMap map;
protected void onCreate() {
super.onCreate(null);
setContentView(R.layout.activity_main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMyLocationEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick_State(View v) {
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_YOU, 9);
map.animateCamera(update);
}
public void onClick_City(View v) {
map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_CITY, 16);
map.animateCamera(update);
}
public void onClick_You(View v) {
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_STATE, 18);
map.animateCamera(update);
}
}
这是Menu.java(启动页面):
package com.deliveryfor;
import android.app.Activity;
import android.os.Bundle;
public class Menu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView (R.layout.splash); }
}
答案 0 :(得分:2)
您必须将Splash Activity创建为经典活动,并且必须在Manifest
中声明它将是第一个启动的活动。
将此行添加到活动启动标记中:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
然后,在SplashActivity.java
的onCreate()中,添加自动启动MainActivity
的代码。
我像这样使用TimerTask:
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
Intent toHomePage = new Intent(context,MainActivity.class);
startActivity(toHomePage);
finish();
}}, 5000);
5000
表示Intent toHomePage将在5秒后启动。
希望它能帮到你!
答案 1 :(得分:1)
您需要创建一个Intent来启动MainActivity。现在,Menu的代码除了创建UI之外什么也没做。 official documentation描述了如何执行此操作。
你需要这样的东西:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
您可能还想重新考虑使用启动画面,除非您有令人信服的理由(似乎并非如此)。有关详细信息,请阅读this blog帖子。这是我觉得非常有趣的摘录:
启动画面可用于在资源可用之前提供资源 申请开始。我个人认为98%的人没必要 案件。它可能对积极依赖沉重的应用程序有用 谷歌地球,天空地图或游戏等资源,但事实并非如此 适用于简单的实用程序应用程序,如feed阅读器,社交 网络应用程序,新闻阅读器等。您不应该需要网络 启动时的连接也不会进行繁重的计算。
答案 2 :(得分:1)
我这样使用它:
public class SplashActivity extends Activity{
private final static long SPLASH_TIME_OUT = 2000;
// SplashActivity --> serves as entry-point for the app at several situations
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashActivity.this, RegisterActivity.class);
startActivity(i);
// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}
答案 3 :(得分:0)
我将此活动作为MainActivity.java添加到第一页:
public class MainActivity extends AppCompatActivity {
oAuth_Model oAuth_model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
showBasicSplash();
}
private void showBasicSplash() {
new Thread(){
@Override
public void run() {
super.run();
try {
Thread.sleep(1500);
handler.sendEmptyMessage(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
public void handleMessage(Message m){
if (getBoolean(Constant.AFTERLANG)){
Intent intent = new Intent(MainActivity.this, Landing_three.class);
startActivity(intent);
finish();
}else {
Intent intent = new Intent(MainActivity.this, Activity_Sec.class);
startActivity(intent);
finish();
}
}
};
}
并将此活动添加到Manifests.xml中:
<activity android:name=".MainActivity"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
并打算进行其他活动后杀死Mainactivity。
finish();