活动等待Intent

时间:2011-12-22 07:58:27

标签: android android-intent wait

我正在尝试做什么


Hello Guys,我正在尝试创建一个SplashScreen,它通过Intent启动服务。服务启动后,Activity(SplashScreen)应该等到它从我的服务接收到Intent。

问题


我需要做什么,我的活动等待它从我的服务收到意图。如果你能给我一个很好的教程或一些代码片段,那将是很好的。 在这里,您可以找到我的SplashScreen代码。

代码


package de.stepforward;

import de.stepforward.service.VideoService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SplashActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        // Sagt dem Video-Service das er beginnen soll die
        // Videos herunter zu laden
        Intent LoadVideos = new Intent(this, VideoService.class);
        LoadVideos.putExtra("VIDEO_SERVICE", "start");
        startService(LoadVideos);

        // In this thread I want that it waits for my Intent
        // and than it goes to the next Activity
        Thread splashThread = new Thread() {

            @Override
            public void run() {
                try {
                    int waited = 0;
                    while (waited < 3000) {
                        sleep(100);
                        waited += 100;
                    }
                }
                catch (InterruptedException e) {
                    // do nothing
                }
                finally {
                    finish();
                    final Intent Showvideo = new Intent(SplashActivity.this,
                                                        ChannelTest.class);
                    startActivity(Showvideo);
                }
            }
        };
        splashThread.start();
    }
}

3 个答案:

答案 0 :(得分:1)

查看此链接可能对您有所帮助。您可以通过活动监控服务状态。

Restful API service

答案 1 :(得分:1)

以下是您的架构应该是什么样的:

<强> INTENT_CST


String START_INIT_ACTION = "your.package.name.START_INIT";
String INIT_ENDED_ACTION = "your.package.name.INIT_ENDED";

<强> SplashActivity


on onCreate:

startService(new Intent(START_INIT_ACTION)

on onResume:
如果您选择在服务中发送广播:

registerReceiver(new BroadcastReceiver(){
    //implement onChange()},
    new IntentFilter(INIT_ENDED_ACTION));

在onPause中,取消注册接收器以释放内存

<强> LoadingService


扩展AsyncTask来完成你的后台工作。在onPostExecute中,有2个选项:

startActivity(new Intent(...)) // as your doing in your post

sendBroadcast(new Intent(INIT_ENDED_ACTION)); stopSelf();

您的清单


使用带有IntentFilter

<action name="your.package.name.START_INIT"/>声明服务LoadingService

答案 2 :(得分:0)

启动服务不会影响前台屏幕。所以启动启动画面并启动服务,正如您现在所做的那样。在服务中进行操作,之后开始新的活动形成服务本身。