首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现这个辅助线程以避免错误?(Android)

如何实现这个辅助线程以避免错误?(Android)
EN

Stack Overflow用户
提问于 2014-05-25 17:45:47
回答 1查看 52关注 0票数 0

我在我的Android应用程序中实现了一个启动屏幕,它:

  • 从服务器加载sqlite数据库
  • 加载urls以获取JSON
  • 在设备中创建sqlite数据库并执行多个查询。

我正在使用AsyncTask来做所有事情,如果用户在进程中间关闭应用程序或关闭设备,因为应用程序:

  • 可能是在设备中创建数据库或执行关键查询。
  • 可能是从服务器下载sqlite。
  • 可能正在运行几个重要的进程

当然,整个过程(3-5秒)很重要。

所以..。我怎么能避免这种情况?我应该使用处理程序,加载器,on-(暂停,停止,销毁)方法来实现我的目标吗?你能给我举个例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-25 18:15:06

正如上面的注释中提到的,您应该使用服务,因为它们的生命周期与活动的生命周期是分开的。

创建这样的服务:

代码语言:javascript
运行
复制
public class MyService extends Service {

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


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Do everything you need to here, then call stop:
        Log.d("DEBUG", "Started...");

        stopSelf();
        return super.onStartCommand(intent, flags, startId);
    }


    @Override
    public void onDestroy() {
        Intent intent = new Intent("com.example.androidexample.SERVICE_STOPPING");
        sendBroadcast(intent);
        super.onDestroy();
    }

}

然后在活动中:

代码语言:javascript
运行
复制
public class MainActivity extends Activity {

    private ServiceCompleteReceiver receiver;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter filter;

        receiver = new ServiceCompleteReceiver();
        filter = new IntentFilter("com.example.androidexample.SERVICE_STOPPING");
        startService(new Intent(this, MyService.class));
        registerReceiver(receiver, filter);
    }


    public class ServiceCompleteReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // Do whatever needs to be done here

            unregisterReceiver(receiver);
        }

    }

}

编辑:

别忘了把它也添加到你的舱单上

代码语言:javascript
运行
复制
   <service
        android:name="com.example.androidexample.MyService"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
    </service>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23858201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档