代码很好(?),但应用程序在Android上运行缓慢(服务+意图)



我有三个java文件:

  1. ServiceActivity -一切开始的主活动(静态int i在本文件前面定义)

  2. Elserwis -它是服务(它有一个计时器,我已经传递了变量I ->当计时器必须打开时,它将是一个小时)

  3. Sekundo -用户输入小时的意图=>在变量i<</p>

下面是主活动的代码片段->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));  
    }
}

我认为问题是在最后,其中startService奠定(作为onActivityResult的子函数)

如果你需要任何其他代码片段,我可以粘贴在这里,但问题是:当计时器开始时,我的应用程序运行得很慢,Toast显示超过1分钟。有人知道为什么吗?

<标题>编辑:
     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();
 }
}

这只是我的代码的alpha版本,但最终版本将是类似的(现在它只传递有关当天的信息到我的服务)->在最终版本中应该通过小时和分钟)

"服务推出!"toast长时间开机,在AVD上大部分时间都崩溃了,在我真正的智能手机上,它只需要很长时间,但仍然可以顺利工作…


基本上问题开始时,我移动startService从onClick()函数到onActivityResult。它需要留在那里,因为服务使用int i(用户在新意图中类型为int i)来设置计时器的数据(计时器在Elserwis中)。我已经用服务代码更新了我的第一篇文章,所以你可以得到我的意思

我猜startService本身没有引起任何阻塞。
我猜你有代码在startService需要一段时间来完成,并导致您的应用程序UI锁定。

如果是这种情况,那么你需要做的是在运行导致延迟的代码之前在服务中创建一个新线程。

你需要将任何长时间运行的代码块保存在一个单独的线程中,以避免阻塞UI。我会对Elserwis.class中的代码感兴趣,因为这将有助于确定问题的实际所在。或者,如果你看看你的代码,并根据我所说的找出它,那么你就不需要再发布任何代码了。

最新更新