所以我使用 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 中。
如果您将启动线程的代码放在 MainService
的 onStartCommand
方法中,应用程序从菜单/语音命令启动后,该线程应该立即启动。
我希望这能让事情变得更清楚。
关于java - 如何在我的 Google Glass 应用程序启动后立即启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23536856/