java - 如何在我的 Google Glass 应用程序启动后立即启动线程?

标签 java android multithreading google-glass google-gdk

所以我使用 GDK 构建了一个小型 Google Glass 应用程序,它基本上通过在后台打开线程并每隔几秒轮询 RESTful 网络服务来伪造推送通知。

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

我以前从未做过 Android 开发,所以我不知道为什么我的 Activity 可能不会在用户启动应用后立即加载。

这里是一些代码的概述。

public class MainActivity extends Activity {


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

然后是实际的线程(我知道这很糟糕,它是一个原型(prototype) :-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 list

<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>

最佳答案

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

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

如果您将启动线程的代码放在 MainServiceonStartCommand 方法中,应用程序从菜单/语音命令启动后,该线程应该立即启动。

我希望这能让事情变得更清楚。

关于java - 如何在我的 Google Glass 应用程序启动后立即启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23536856/

相关文章:

android - 解析 CalendarContract.Events.DURATION 值

java - 使用 javafx packager 的 JavaFX 中的类路径

java - Sublime Text2如何添加run java标签?

android - ndk-构建 "member ... in archive is not an object"

android - 在地球上找到 2 个向量的交点

c# - 为什么我们应该避免锁定(this)?

c++ - 如果线程经常休眠,Windows 可以完全停止该线程吗?

c++ - OpenCV 的级联分类器未充分利用 CPU 的能力

java - Parasoft 代码分析器警告 - 'variable is checked for null after being dereferenced'

java - 哪个联合效率更高: List/HashSet