2016-10-14 2 views
-1

私は大量のSQL操作(あまりにも多くの挿入)をアプリケーションの冒頭に作成する必要があります。私はこのようなスプラッシュ画面を持っています。 (インストール後)を実行し、最初は必ずuiスレッド外のワーカークラス

public class SplashScreen extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     ... 
     new SetupDataBaseWorker(this).execute(); 
    } 
    private class SetupDataBaseWorker extends AsyncTask<Void, Void, Void> { 
     private SqliteManager db_sql; 
     private Activity activity; 

     public SetupDataBaseWorker(Activity activity) { 
      this.activity = activity; 

      db_sql = new SqliteManager(this.activity); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      ... 
      showDialogLoading(); 
      ... 
     } 

     @Override 
     protected Void doInBackground(Void... urls) { 
      ... 
      db_sql.inserting(); 
      ... 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      this.activity.startActivity(new Intent(SplashScreen.this, MainActivity.class)); 
      this.activity.finish(); 
     } 
    } 
} 

1-、私は10秒(私はそれが実行中のスクリプトだと仮定...)のために空白の画面を持って、そして私のアプリはmainActivityになり、後に。

2つ目のアプリを実行すると、1秒間空白の画面が表示され、MainActivity(SplashScreenレイアウトも表示されません)に移動します。 それは、ワーカースレッドの外で作業していないワーカークラスのようです...それを達成するために何をする必要がありますか?私はすでにこのワーカーをサービスに入れてみましたが、それでも同じです。

+1

あなたは 'SetupDataBaseWorker()。execute();'を使用していますが、これは 'new SetupDataBaseWorker(this).execute();'ではなく、 'db_sql = new SqliteManager(this.activity );または私は間違っていますか? – michoprogrammer

+0

'showDialogLoading'はそのメソッドを動作させ、実際にロードダイアログを表示しますか? – njzk2

+0

皆さん、これは*抽象化です* ...コード全体が実行中です – PMateus

答えて

2

にあなたがして、メインスレッドでは、すべてのブロックされていないバックグラウンドスレッドですべてをやっている場合。

「Splashアクティビティ」の「assetsフォルダからDBにデータベースをコピーする」と同じことをやっています。私はあなたのようなものは得られません。

IDEの「問題」です。Androidスタジオは、アプリケーションをデバイスにインストールするためにEclipseよりも時間がかかります。

「APKをデバイスにコピーしてデバイス自体からインストールする」と一度試してみてください。

私もあなたと同じように仮定していました。問題は私たちのコードやAndroidに関連しない "IDE"に関するものです。

+0

Perferct ...あなたは正しい。私はこれをして、声を出して、それをやった。 – PMateus

1

私はこの問題はここにあると思う:

public SetupDataBaseWorker(Activity activity) { 
    this.activity = activity; 
    db_sql = new SqliteManager(this.activity); 
} 

移動初期化子

public SetupDataBaseWorker(Activity activity) { 
    this.activity = activity;  
} 

@Override 
protected Void doInBackground(Void...urls) { 
    ... 
    db_sql = new SqliteManager(this.activity); 
    db_sql.inserting(); 
    ... 
    return null; 
} 
+1

@MachoProgrammer、素敵なアバターcat;) – Vyacheslav

+0

ありがとう:DIは素晴らしいウェブで見つけました:D – michoprogrammer

+0

これを行うと、スクリプトが速くなります... – PMateus

関連する問題