我有以下代码,在应用程序从一个活动导航到另一个活动后冻结。我检查了我的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);
我不确定这里有什么问题。
答案 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