我的Google Glass应用程序启动后如何启动线程?

时间:2014-05-08 08:42:45

标签: java android multithreading google-glass google-gdk

因此,我使用GDK构建了一个小型Google Glass应用程序,该应用程序基本上通过在后台打开一个Thread并每隔几秒轮询一次RESTful Web服务来伪造推送通知。

目前,当我打开应用程序时,它会加载并运行服务,但是活动(线程所在的位置)的onStart()和onCreate()不会被调用,直到用户通过打开应用程序与应用程序交互为止菜单。

之前我从未进行过Android开发,所以我不知道为什么用户启动应用后我的活动可能无法加载。

以下是一些代码的概述。

public class MainActivity extends Activity {


@Override
protected void onStart()
{
    super.onStart();
    startThread();
}

然后是实际线程(我知道它很可怕,它是原型:-P)

public void startThread()
{
    thread = new Thread()
    {
        @Override
        public void run() {
            try {
                while(true) {

                    sleep(5000);
                    boolean tmp = poll();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    thread.start();
}

Android Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testpack"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

<application
    android:allowBackup="true"
    android:icon="@drawable/logo_box"
    android:label="Test">
    <uses-library
        android:name="com.google.android.glass"
        android:required="true" />
    <activity
        android:name="com.testpack.MainActivity"
        android:theme="@style/MenuTheme"
        android:enabled="true"/>
    <service
        android:name="com.testpack.MainService"
        android:label="@string/app_name"
        android:icon="@drawable/logo_box"
        android:enabled="true">
        <intent-filter>
            <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
        </intent-filter>
        <meta-data
            android:name="com.google.android.glass.VoiceTrigger"
            android:resource="@xml/hello_show" />
    </service>
</application>

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

1 个答案:

答案 0 :(得分:2)

与大多数常规Android应用程序不同,Glassware通常会启动一个服务(在后台运行)而不是一个活动(这是一个前台任务)。是因为很多时候你会想要与时间线互动(即添加真人卡等),而不是通过活动接管整个屏幕(或沉浸在Glass中)。

在清单中,您将使用语音命令启动MainService,但您的代码位于MainActivity中。

如果您使用onStartCommand MainService方法启动线程,该方法应在菜单/语音命令启动应用程序后立即启动。

我希望这会让事情更加清晰。