2011-12-30 13 views
-1

だから私は3つのjavaファイル持っている:コードは大丈夫ですが、アプリは、Android(サービス+意図)に遅い実行されている

  1. ServiceActivity - すべては私が定義されている(静的なint型を開始し、メインの活動を(?)以前、このファイルで)

  2. Elserwis - >それはタイマーがオンにする必要がありますとき以来の時間となります)

  3. Sekundo - それはサービス(それは私が私の変数を渡されましたタイマーを持っています - ユーザーが時間を置くインテント=>変数i <ここ

は主な活動からのコードの断片である - > ServiceActivity:

private OnClickListener startListener = new OnClickListener() { 
    public void onClick(View v){ 
     Intent intent = new Intent(getApplicationContext(), Sekundo.class); 
     startActivityForResult(intent,1337); 
    }   
}; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    /* Place out code to react on Activity-Result here. */ 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == 1337){ 
     i=data.getIntExtra("result",5); 
     Toast tost = Toast.makeText(getApplicationContext(), "ELO"+data.getIntExtra("result",0)+data.getIntExtra("result1",0), 1000); 
     tost.show(); 
     startService(new Intent(SerwisActivity.this,Elserwis.class)); 
    } 
} 

I問題は(onActivityResultのサブ関数として)STARTSERVICEが産む端にあると思う

他のコード断片が必要な場合は、ここに貼り付けても構いませんが、質問は です。タイマーが開始されると、アプリの起動は非常に遅く、Toastは1分以上表示されます。誰でも知っている理由は?

EDIT:ちょうどアルファ私のコードのバージョンが、最終

 public class Elserwis extends Service { 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 

    okresowePowiadomienie(); 

Toast.makeText(getApplicationContext(),"Service LAUNCHED!", 1000).show(); 


} 


Date data33 = new Date(111,11,SerwisActivity.i,2,25); 
int d = data33.getDate(); 
Timer timer = new Timer(); 
public void okresowePowiadomienie(){ 


TimerTask timerTask = new TimerTask(){ 

    public void run() { 



    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher,"OKRes",System.currentTimeMillis()); 

    Intent notIntent = new Intent(getApplicationContext(), SerwisActivity.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, notIntent, 0); 

    notification.setLatestEventInfo(getApplicationContext(),"Powiadomienie x:","Kliknij aby d:usunac ;)t:"+d,contentIntent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    notificationManager.notify(1335, notification); 
    // } }; 
    }}; 
    timer.scheduleAtFixedRate(timerTask ,data33 , 120000); } 


@Override 
public void onDestroy() { 

    super.onDestroy(); 
    timer.cancel(); 
    Toast.makeText(this, "Service dead!", Toast.LENGTH_LONG).show(); 
} 
} 

ザッツは同様であろう(今では私のサービスに一日についての情報を渡す - >最終版では、それは時間と分を渡す必要があります)

"サービスが起動しました!"私はonClickのからSTARTSERVICEを移動したときにトーストが年齢のためにとどまり、それはAVD上でほとんどの時間をクラッシュし、それだけで時間がかかりますが、まだそれがスムーズに動作するはずです、私の本当のスマートフォンで...


は基本的に問題は(開始しました)関数をonActivityResultに設定します。サービスはint i(新しいインテントでユーザータイプのint型)を使用して、タイマーのデータを設定します(タイマーはElserwisにあります)ので、そこにとどまる必要があります。私はサービスコードで私の最初の投稿を更新しましたので、私は何を意味するのですか?

+0

'startService'を削除しても問題ありませんか?確かに 'startService'はブロックすべきではありませんか? 'onStartCommand'には何が入っていますか? –

+1

プロファイリングを試しましたか? – bbaja42

+0

私は最初の投稿を編集しましたので、もっと多くのコードを見ることができます。 – Ammo

答えて

1

私はstartService自身がブロックを引き起こしていないと思っています。
startServiceにコードがあり、完了するのにしばらく時間がかかり、アプリケーションUIがロックアップされることがあります。

これが当てはまる場合は、遅延を引き起こすコードを実行する前に、サービス内に新しいスレッドを作成する必要があります。

UIをブロックしないように、長時間実行されるコードブロックを別のスレッドに保存する必要があります。私はElserwis.classにあるコードに興味があり、問題が実際にどこにあるのかを特定するのに役立ちます。あるいは、あなたがコードを見て、私が言ったことに基づいてそれを理解すれば、それ以上のコードを投稿する必要はありません。

+0

基本的に問題は、onServiceをonClick()関数から移動したときに開始されました。これは、onActivityResultに前に投稿されたものです。サービスはint i(新しいインテントでユーザータイプのint型)を使用して、タイマーのデータを設定します(タイマーはElserwisにあります)ので、そこにとどまる必要があります。私はサービスコードで私の最初の投稿を更新したので、私は何を意味するのかを知ることができます。 – Ammo

関連する問題