startActivity之后的startService冻结了我的android应用程序

时间:2014-05-28 04:12:01

标签: android android-intent android-service android-pendingintent

我有以下代码,在应用程序从一个活动导航到另一个活动后冻结。我检查了我的logcat是否有任何错误,但没有。你能帮我解决一下这个问题吗?谢谢。

我的服务类

public class MyAlarmService extends Service
{
private Timer timer1 = new Timer();
private Timer timer2 = new Timer();

private static final long UPDATE_INTERVAL = 25000;

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

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    _startService();

}

private void _startService() {
    timer1.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            System.out.println("Timer started1");
            Leavenotification(MyAlarmService.this);
            Timesheetnotification(MyAlarmService.this); 
        }
    }, 0, UPDATE_INTERVAL);
}

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}

}

这就是我启动服务和活动的方式

                    Intent intent = new Intent(this, Dashboard.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    intent.putExtra("userID", userID);
                    intent.putExtra("name", name);
                    startActivity(intent);
                    startService(new Intent(this,MyAlarmService.class);

我不确定这里有什么问题。

3 个答案:

答案 0 :(得分:1)

服务不会自动在另一个主题中运行,而您的服务也没有做任何努力来启动工作线程。

此外,onStart(...)已弃用且您的服务已被限制为"并且"开始"服务通常很好,但如果不是真的需要,我决定只使用一个。最简单的方法可能是使用IntentService为您处理线程,但有一些限制。

我建议你看一下official service tutorial并熟悉一下"绑定"之间的区别。并且"开始"服务。

从底线开始,首先查看IntentService,看看它是否符合您的需求,否则您将不得不自己处理服务中的线程。

答案 1 :(得分:0)

一旦开始另一项活动,您当前的活动就会转到后台。并且您当前的活动不会在主线程上运行。但是服务需要在主线程上运行..服务在其托管进程的主线程中运行。试着这样做

startService(new Intent(this,MyAlarmService.class);
startActivity(intent);              

答案 2 :(得分:-1)

在清单中声明您的服务。

<service class=".MyService" name=".MyService">
       <intent-filter>
           <action
            android:value="sample.service.MY_SERVICE"
            android:name=".MyService"
            android:process="another_thread"/>
    </intent-filter>
       </service>

并使用此属性。 机器人:过程=&#34; another_thread&#34;

使用此参考。 http://developer.android.com/guide/topics/manifest/service-element.html#exported