【发布时间】:2014-01-22 12:28:18
【问题描述】:
我正在开发一个使用 SQLite 连接的简单 Android 应用程序。当我运行它时,它会执行一个异步任务,该任务从 SQLite 读取所有记录并将它们作为列表显示在 App 中:
public class ReadData extends AsyncTask< Void, Void, String >
{
@Override
protected String doInBackground( Void... arg0 )
{
Database oDatabase = new Database( );
SQLiteDatabase myDB = oDatabase.getWritableDatabase( );
Cursor cursor = myDB.rawQuery( "SELECT * FROM `items` ORDER BY `id`", null );
if( cursor != null )
{
while( cursor.moveToNext( ) )
{
MainActivity.items.add( new DataItem( Database.getIntegerIndex( cursor, "test a" ), Database.getIntegerIndex( cursor, "test b" ), Database.getIntegerIndex( cursor, "test c" ), Database.getIntegerIndex( cursor, "test d" ) ) );
}
}
}
}
如果我单击“添加”按钮,警报接收器会在 30 秒后运行另一个异步任务,并且它会执行少量数据库插入:
public class InsertData extends AsyncTask< Void, Void, String >
{
@Override
protected String doInBackground( Void... arg0 )
{
Database oDatabase = new Database( );
SQLiteDatabase myDB = oDatabase.getWritableDatabase( );
ContentValues newTodoValues = new ContentValues( );
int iTestA = new Random( ).nextInt( 100 );
int iTestB = new Random( ).nextInt( 100 );
int iTestC = new Random( ).nextInt( 100 );
int iTestD = new Random( ).nextInt( 100 );
newTodoValues.put( "test a", iTestA );
newTodoValues.put( "test b", iTestB );
newTodoValues.put( "test c", iTestC );
newTodoValues.put( "test d", iTestD );
myDB.insert( "items", null, newTodoValues );
boolean bIsRunning = false;
String[ ] tokens = Tools.getBase( ).getApplicationContext( ).getPackageName( ).split( "\\." );
if( tokens.length >= 3 && tokens[ 0 ].equals( "kibbo" ) && tokens[ 1 ].equals( "soft" ) && tokens[ 2 ].equals( "app" ) )
bIsRunning = Tools.getBase( ).getApplicationContext( ).getPackageName( ).equalsIgnoreCase( ( ( ActivityManager )Tools.getBase( ).getApplicationContext( ).getSystemService( Context.ACTIVITY_SERVICE ) ).getRunningTasks( 1 ).get( 0 ).topActivity.getPackageName( ) );
if( bIsRunning && Tools.base.getEngine( ) != null )
MainActivity.items.add( new DataItem( newTodoValues.getAsInteger( "test a" ), newTodoValues.getAsInteger( "test b" ), newTodoValues.getAsInteger( "test c" ), newTodoValues.getAsInteger( "test d" ) ) );
}
}
当我点击“添加”按钮并离开应用程序时,警报接收器仍将在 30 秒后执行异步任务和 SQL 插入。安全吗?我的意思是当我在 Async Task 的 SQL 插入过程中完美运行我的应用程序时会发生什么事情吗?会不会有什么问题发生?
【问题讨论】:
标签: android sqlite android-asynctask