第一个活动执行但不显示

时间:2016-02-01 21:33:50

标签: android android-activity splash-screen

我的应用程序开发时遇到了一个小问题。我的第一个活动是从设备读取数据(或在互联网上获取并在本地保存),然后启动使用这些数据的第二个活动。如果无法加载数据,它将保留在该活动上并显示无法加载数据。

问题是,当第一个活动开始时,如果数据可用且全部,则它不会显示活动。所有你看到的是一个空白页面,然后第二个活动出现。

我的数据检索是在异步任务中完成的,我等到任务完成后才开始第二个活动。这就是为什么我不知道为什么我的第一个活动只是空白而应该是我的闪屏...

第一项活动:

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    setSupportActionBar((Toolbar) findViewById(R.id.my_toolbar));
    ((TextView)findViewById(R.id.toolbar_title)).setText(R.string.toolbar_loading);
    findViewById(R.id.toolbar_search).setVisibility(View.GONE);
    textView = (TextView) findViewById(R.id.main_text);
    retryButton = (Button) findViewById(R.id.main_button);
    retryButton.setVisibility(View.INVISIBLE);
    textView.setVisibility(View.VISIBLE);
    mTracker = ((MyApp) getApplication()).getDefaultTracker();
    ((MyApp) getApplication()).setServerInformation(SharedPrefManager.getServer(this));
    // Modification des options si l'application en est à sa première
    // exécution
    if (SharedPrefManager.isFirstRun(this)) {
        SharedPrefManager.setFirstTimePrefs(this, Utility.retreiveLanguage());
        Log.d(LoginActivity.class.getName(), "First run triggered.");
    }
    ((MyApp)getApplication()).configureSocketHandler(false, MainActivity.this);
}
public void onResume(){
    super.onResume();
    Log.d(MainActivity.class.getName(), "ON RESUME");
    mTracker.setScreenName(MainActivity.class.getName());
    mTracker.send(new HitBuilders.ScreenViewBuilder().build());
    ((MyApp) getApplication()).onResume(this);
    if(options == null){
        loadRegions();
    }else{
        startRegionActivity(null);
    }
}
private void loadRegions() {
    if(options == null) {
        options = OptionsManager.getInstance().getOptions();
    }
    Log.d(MainActivity.class.getName(), "Trying to load options ");
    if(options != null) {
        startRegionActivity(null);
    }else{
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.region_error);
        builder.setCancelable(false);
        builder.setMessage(R.string.region_error_message);
        builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do nothing
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
        findViewById(R.id.toolbar_login).setVisibility(View.GONE);
        textView.setVisibility(View.INVISIBLE);
        retryButton.setVisibility(View.VISIBLE);
    }
}

由于

1 个答案:

答案 0 :(得分:0)

我终于以一种简单而奇怪的方式解决了我的问题..

正如我之前告诉过你的那样,我的onCreate和onStart有时间完成我的异步任务(我记录它们以确保)。我认为问题是,Async任务启动太快,Android无法使用活动中的UI刷新UI。为了确保在启动Async任务之前有时间出现,我封装了我的方法,在runnable中调用任务并让一个worker在2秒的等待时间后执行runnable:

if(options == null){
        Runnable task = new Runnable(){
            @Override
            public void run() {
                loadRegions();
            }
        };
        worker.schedule(task, 2, TimeUnit.SECONDS);
    }else{
        Runnable task = new Runnable(){
            @Override
            public void run(){
                startRegionActivity(null);
            }
        };
        worker.schedule(task, 2, TimeUnit.SECONDS);
    }

在课堂开始时我的工作人员声明:

private final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();

希望这可以帮助将来的某个人!