在Android中运行后台进程

时间:2013-07-18 13:01:04

标签: android background-process

我正在开发一个必须每小时连接一台服务器的应用程序。这种情况发生在用户不必打开应用程序的情况下。

  1. 应用可以在后台运行吗?这意味着如果有人在我的应用程序必须连接到服务器时使用我的应用程序正在玩游戏,我的应用程序是否可以在不中断用户玩游戏的情况下进行连接。我知道I-Phone只允许一次运行一个第三方应用程序,IOS是不同的?

  2. 假设应用程序可以作为后台进程运行,它们是否可以永久保持打开状态?我知道几乎所有较新的手机实际上并没有让用户真正终止应用程序,系统实际上会随时终止程序。

  3. 如果应用无法在后台运行并且永久保持打开状态,那么手机每小时可以自动打开一个应用程序吗?

  4. 我一直在关注闹钟应用程序,因为它们似乎是在设定时间打开/运行的后台进程,这正是我希望我的应用程序执行的操作。可悲的是,我找不到任何好的源代码。所有闹钟示例都要求应用程序打开或警报不会响起。任何帮助将非常感激。 (请不要将我链接到谷歌来源,我已经看过了)

3 个答案:

答案 0 :(得分:1)

Android有一个叫做

的东西
  

服务

服务以及警报管理器应该可以解决您的问题。

答案 1 :(得分:1)

1→是的,您的应用可以在不中断用户的情况下连接到后台服务器。您需要使用后台服务来实现此目的。

2→你可以拥有一个持续运行的后台服务,但它真的是一个坏主意,让它永远运行。这将耗尽电池并不必要地使用内存,CPU和网络。 系统可以控制应用程序,它可以在需要时终止后台进程。

3→我不认为您可以自动打开应用程序。除非您使用某种服务将广播或事件发送到将启动它的应用程序。这又是一个糟糕的设计。用户不会喜欢他/她的手机会表现得奇怪:)

答案 2 :(得分:0)

是的,您可以创建一个简单的服务类,如此样本 ManiFest文件

<service
        android:name="com.example.service.LocationUpdateSerivice"
        class=".LocationUpdateSerivice" >
        <intent-filter>
            <action
                android:name=".LocationUpdateSerivice"
                android:value="com.pausefablogin.service.MY_SERVICE" />
        </intent-filter>
    </service>

Java代码

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;



public class LocationUpdateSerivice extends Service implements LocationListener {


   @Override
   public void onCreate() {
       super.onCreate();


       //I Have Created this class for location update use the concept

   }


   private void UpdateLocation()
   {}
   @Override
   public void onStart(Intent intent, int startId) {      
       super.onStart(intent, startId);  
       Log.i(tag, "Service started...");
   }
   @Override
   public void onDestroy() {
       super.onDestroy();
       Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
   }

   @Override
   public IBinder onBind(Intent intent) {
       return null;
   }

@Override
public void onLocationChanged(Location arg0) {


}


@Override
public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

}


@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}


@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}








}