0

我有一个应用程序,其中包含 3 个活动。在第一个活动中,我在 onCreate() 中启动线程并在 onDestroy() 中停止它,所以我希望这个线程在应用程序运行时能够工作。在这个线程中,我从数据库中读取数据并将其发送到服务器。

主要问题:是否有正确的方法来完成这项工作,或者第一个活动可以在应用程序工作时被破坏?如何以正确的方式做到这一点?

附带问题:由于对数据库的多次写入问题,有没有办法创建类来管理 SQLite 写入并且可以从每个活动中访问?

我考虑使用 Application 类,但对此有一些疑问。

4

4 回答 4

1

向服务器发送数据通常不是连续操作,而是可重复的作业类型操作,因此看起来您应该使用IntentService而不是 Thread。同样设置onCreate和销毁onDestroy也不是最好的方法,因为即使应用程序在后台,您的线程也会运行(这通常意味着它没有用)。扩展应用程序是相当不错的,但我认为你不需要走那么远。

于 2012-09-28T09:54:18.153 回答
0

即使应用程序的其余部分处于活动状态,您也不能依赖不再需要的活动不被销毁。您可能可以让所有活动都能够启动/停止线程,并使用应用程序全局引用计数器,以便您知道何时要再次启动线程或只是增加引用计数。

关于你的数据库管理类,你的类有多个实例是可以的;您管理的 SQLite 数据库是线程安全的。如果您有其他原因只需要一个助手实例,您可以使用单例模式创建它,以便第一个访问它的客户端创建该实例,然后所有后续客户端都获取它的指针。

于 2012-09-28T09:56:24.243 回答
0

Application 类可用于管理应用程序全局的东西。每当运行一个线程是一个好主意是另一个问题。

  1. 实现一个 android.app.Application 子类。应该在您的应用程序包的根目录中。

    package com.yourapp;        
    
    public class YourApplication extends Application {
        @Override
        public void onCreate() {
            // [...]
        }
        // [...]
    }
    
  2. 在 AndroidManifest 中指定应用程序类。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.yourapp"
              android:versionName="1.0"
              android:versionCode="1.0">
        <application android:name="YourApplication"
                     android:label="@string/app_name"
                     android:icon="@drawable/icon">
        <!-- ... -->
        </application>
    </manifest>
    
于 2012-09-28T10:38:52.933 回答
0
  • 对于第一个问题,用于IntentService与服务器进行通信。
  • 对于第二个问题,扩展SQLiteOpenHelper类并使其成为单例。就是这样。
于 2012-09-30T13:57:03.793 回答