我正在运行代码,用户选择日期和时间。用户可以在将来选择任何日期和时间。这些日期和时间存储在sqlite数据库中。用户选择这些日期和时间后,活动将调用服务类,我将按以下方式运行新线程
public int onStartCommand(Intent intent, int flags, int startId) {
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
final SqliteController db = new SqliteController(getApplicationContext());
new Thread(new Runnable() {
@Override
public void run() {
List<Greetings> greetings = db.getAllGreetings();
if (db.getGreetingsCount() >= 0) {
do {
for (Greetings g : greetings) {
Calendar cal = Calendar.getInstance();
.........
.........//other codes
此线程访问数据库中的数据,并将时间和日期与系统时间和日期相匹配。一个日期和时间匹配,我正在使用这样的广播接收器的报警管理器
if (dnt.equals(cdt)) {
Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
aint.putExtra("msg", msg);
aint.putExtra("phone", phone);
aint.putExtra("id", id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
db.deleteGreetings(g);
}
答案 0 :(得分:1)
由于几乎所有发布的代码都在后台线程中运行,这不会导致应用程序在主线程中执行太多工作。您的问题可能来自其他来源。
您可以尝试使用跟踪视图分析您的应用,如Android文档here中所述。尝试找出哪些方法消耗最多的时间来缩小搜索范围。
另外,如果您的服务只是在后台创建运行此任务的单个线程,则应使用IntentService而不是服务。然后,您实现onHandleIntent方法而不是onStartCommand方法。 IntentService将处理它在单个后台Looper中收到的所有操作。