2017-04-08 5 views
-2

ここにmystartupのコードAcitivtyがあります。起動時に、私はどこにメッセージdbロードを表示するdbコードを置く...など。それはうまく動作しますが、5~10秒間黒い画面を表示する次のコードに問題があります。その後、すべてが大丈夫です。だから私はこの状態になりたくない。 mystartupのactivtyのAndroid Dbコードが10秒間私のアプリをハングアップすると、黒い画面が表示され、この起動後にハングします。

// OnCreateのイベントは、ここでは

SharedPreferences prefre=this.getSharedPreferences("firstt",this.MODE_PRIVATE); 
    boolean firsttimes=prefre.getBoolean("firstt", true); 

    if(firsttimes) 
    { 
     SharedPreferences.Editor editere=prefre.edit(); 
     editere.putBoolean("firstt", false); 
     editere.commit(); 

     MyAlterts alterts=new MyAlterts(); 
     alterts.ShowMsgWithOk(this,"db loaded ..... wait"); 

     //calling db functions first run so that optmize next time 
     DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); 
     databaseAccess.openreadabledb(); 

     //db code here also 
     return; 
    } 
+0

それはworkfineそれSDカードからのコード上でアクションを実行する理由ですので、デバイス上で、それは時間がかかるタスクコードdatabaseaccessがopenorcreateデシベルFIRSTTIMEで数秒間acitvtyをハングアップします。したがって、このコードがアプリケーション内のどこかで最初に呼び出すと、最初に実行した後に呼び出される操作がハングアップする – user3419461

+0

問題が存在する場合、 'editere.commit();'を 'editere.apply();に変更します。 ** DatabaseAccess ** –

+0

はい、そのdatabaseaccessコードに関連して、私はコードが数秒bczデータベースサイズがハングアップするため、どのようにこれに対処する責任があることを知っています。私はちょうどバックグラウンド作業に入れましたが、適切なダイアログが表示されているので、dbのロード方法を示しています。 – user3419461

答えて

0

すべてのDB操作は、他のアプリが黒い画面を示す立ち往生されるバックグラウンドスレッドで実行されなければならないコードにあります。したがって、db操作をasynctaskに移動する必要があります。

+0

db loading ...メッセージを表示しているDialogoueでそれを行う方法 – user3419461

+0

asynctaskにonPreExecuteメソッドのダイアログを表示することができます。 doInBackgroundメソッドからdb操作を行い、db操作が完了したら、asynctaskのonPostExecuteメソッドからダイアログを閉じることができます。 – fightingCoder

+0

ありがとうalot dear – user3419461

0

データベースリクエストは、別のバックグラウンドスレッドで実行する必要があります。これは、AsyncTaskを使用して簡単に行うことができます。

パブリッククラス要求がAsyncTaskを拡張{

@Override 
    protected String doInBackground(String... strings) { 
     Stirng result=""; 

     //Make your Database Requests here, you can store the result in the //string result which is what this method will return 

     return result; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     //After doInBackground method has finished executing, the result //will be stored in the perimeter variable above 'result' 
     //process your result here 

    } 

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

     //you can implement an action here e.g a progress dialog to run //when this class is executed, call dialog.dismiss() in onPostExecute 
     //and dialog will be dismissed after the result has been received //ni onPostExecute 


    } 


} 

は最後に)(先に行くと、あなたのonCreateでこの方法を実行します。 bluestack amulator上

request req = new request(); 
req.execute(); 
+0

それは私のために働きます – user3419461

+0

あなたは他の誰かが働いている解決策を識別できるようにupvoteを与えることができます。 –

+0

はい私は投票を諦めたいができない – user3419461

関連する問題