android – 可以在服务中运行AsyncTask并写入数据库吗?

public class IdService extends Service {
    private UploadFilesTask task;
    DBAdapter dbs;

    @Override
    public IBinder onBind(Intent i) {       
        return null;
    }

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

    @Override
    public void onStart(Intent intent,int startId) {   
        super.onStart(intent,startId); 
        if(Networking.isNetworkAvailable(this)){
            if ( intent.hasExtra("start") && taskIsNotRunning() ) {
                task = new UploadFilesTask();
                task.execute();             
            } 
        }
        else{
            if ( intent.hasExtra("start") && taskIsNotRunning() ) {
                Calendar cal = Calendar.getInstance();
                cal.add(Calendar.MINUTE,5);
                String start = "start";
                Intent i = new Intent(IdService.this,IdService.class);
                i.putExtra("start",start);
                PendingIntent sender = PendingIntent.getService(this,192837,i,PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),sender);  
             }
        }
    }   

    private boolean taskIsNotRunning() {
        return task == null || task.getStatus() != AsyncTask.Status.RUNNING || task.isCancelled();
    }

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

    }
    private class UploadFilesTask extends AsyncTask<Object,Object,Object> {
        @Override
        protected Object doInBackground(Object... arg0) {  
            sqliteDatabase db = dbs.getWritableDatabase(); 
            ContentValues values = new ContentValues();
            values.put(DBAdapter.ID,"blank");
            db.insert(DBAdapter.Table,null,values);
            return null;            
        }

        @Override
        protected void onPostExecute(Object result) {       
            super.onPostExecute(result);
            stopSelf();
        }   
    }
}

我想运行一个服务,它将值插入sql数据库中的表.如果没有互联网连接,我希望它等待5分钟,然后再次运行该服务.

代码中的问题是在sqliteDatabase db = dbs.getWritableDatabase();
我可以评估服务中的数据库吗?如果是这样,我如何让我运行代码?谢谢

解决方法

是的,为什么不.使用常规方式.别忘了添加sqliteDatabse.setLockingEnabled(true);使数据库连接线程安全!

附:我看不到你在哪里启动asyncTask?

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...