android服务运行活动

时间:2014-12-28 12:34:45

标签: java android

我制作了一个程序,可以随时重复toast条消息。 因此,我需要在后台运行我的程序。 当toast处的NickyService.java消息时,它可以正常工作。 当toast处的MainActivity.java消息时,它无法正常工作。 我的代码出了什么问题?

//MainActivity.java
public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //go to NickyService.java
        Intent intent = new Intent(MainActivity.this, NickyService.class);
        startService(intent);
        //Toast message right here
        Toast.makeText(getBaseContext(), "service started!", Toast.LENGTH_LONG).show();
    }
}

//NickyService .java
public class NickyService extends Service {
    private Handler handler = new Handler();
    private int check = 10;
    private Timer timer = null;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);

        Intent intent1 = new Intent(NickyService.this, MainActivity.class);
        startService(intent1);

        return START_REDELIVER_INTENT;
    }
}

3 个答案:

答案 0 :(得分:1)

首先

正如您在onStartCommand

中提到的那样
Intent intent1 = new Intent(NickyService.this, MainActivity.class);
        startService(intent1);

此处MainActivity.class不是服务,而是活动

你应该使用

startActivity(intent1);

<强>第二

尝试为此类服务创建一个新类

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;

import java.util.Timer;

/**
 * Created by Jamil on 12/28/2014.
 */
public class NickyService extends Service {
    private Handler handler = new Handler();
    private int check = 10;
    private Timer timer = null;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }



    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        Toast.makeText(this, "onStartCommand", Toast.LENGTH_LONG).show();


        return START_REDELIVER_INTENT;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this,"Service created", Toast.LENGTH_LONG).show();

    }
    @Override
    public void onStart(Intent intent,  int startId) {
        super.onCreate();

        Toast.makeText(this,"OnStarted", Toast.LENGTH_LONG).show();

    }
}

<强>第三

我认为你忘了将它放在Application Tag

下的menifest.xml文件中
 <service android:name=".NickyService">
        </service>

答案 1 :(得分:0)

问题在于您使用的上下文。 使用

getApplicationContext() 

代替

getBaseContext()

在Toast消息中。

答案 2 :(得分:0)

@Don Chakkappan这个正确的解决方案。使用RoboGuice。它对依赖注入很有用。

样本用法,

  public class SampleClass {

    @Inject
    Context context;

    public void doSomethingOnResume() {
            Toast.makeText(context, "Activity has been resumed", Toast.LENGTH_LONG).show();
    }
}

你可以注射你需要的物体。