Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓;应用程序全局“;线_Android_Multithreading_Android Sqlite - Fatal编程技术网

Android 安卓;应用程序全局“;线

Android 安卓;应用程序全局“;线,android,multithreading,android-sqlite,Android,Multithreading,Android Sqlite,我有一个应用程序,它由3个活动组成。在第一个活动中,我在onCreate()中启动线程,并在onDestroy()中停止它,因此我希望该线程在应用程序运行时能够正常工作。在这个线程中,我从数据库读取数据并将其发送到服务器 主要问题:是否有正确的方法来完成这项工作,或者在应用程序运行时第一个活动可能会被破坏?如何以正确的方式做到这一点 附带问题:由于对数据库的多次写入问题,是否有方法创建类,该类将管理SQLite写入,并且可以从每个活动访问该类 我考虑过使用应用程序类,但对此有一些疑问。向服务器发

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

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

附带问题:由于对数据库的多次写入问题,是否有方法创建类,该类将管理SQLite写入,并且可以从每个活动访问该类


我考虑过使用应用程序类,但对此有一些疑问。

向服务器发送数据通常不是连续的操作,而是可重复的作业类型op,所以看起来您应该使用
IntentService
而不是线程。另外,在
onCreate
中设置和在
onestory
中销毁也不是最好的方法,因为即使应用程序位于后台,线程也会运行(这通常意味着它将没有用处)。扩展应用程序是可以的,但我认为您不需要走那么远。

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


关于数据库管理类,可以有多个类实例;您正在管理的SQLite数据库是线程安全的。如果您有其他原因只需要助手的一个实例,您可以使用Singleton模式创建它,这样第一个访问它的客户端就会创建实例,所有后续客户端都会得到它的指针。

应用程序类可用于管理应用程序全局内容。无论何时始终运行线程都是一个好主意,这是另一个问题

  • 实现一个android.app.Application子类。应该位于应用程序包的根目录中

    package com.yourapp;        
    
    public class YourApplication extends Application {
        @Override
        public void onCreate() {
            // [...]
        }
        // [...]
    }
    
  • 在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>
    
    
    
    • 对于第一个问题,使用
      IntentService
      与服务器进行通信
    • 对于第二个问题,扩展
      SQLiteOpenHelper
      类并使其成为单例。 就这样

    也许我不太理解“线程安全”这个词,但在阅读了几个stackoverflow问题和答案后,我发现android SQLite中没有写锁定保护。我可以读很多线程,但我必须只写一个线程。我想用自己的数据堆栈创建全局类,我将在单独的线程中写入数据库,但我应该可以从每个活动访问此堆栈。正如我所说,如果您关心多线程访问,请使用单线程作为帮助器类(或者至少对同步的静态成员对象使用帮助器类)将为您解决这个问题。