如何在Background android中创建运行的应用程序?

时间:2015-08-21 07:54:29

标签: android background notifications

我在Android中创建简单通知,当新输入数据在设备中显示通知时,此通知始终检查来自服务器的数据,我使用intentservice并设置androidManifest但在新数据输入时仍然不显示通知从服务器,这是我的代码:

类通知//在后台获取通知

public class Notification extends IntentService {
    private UrlHelper Url = new UrlHelper();
    private JSONParser jsonParser = new JSONParser();
    public Notification() {
        super(Notification.class.getName());
    }
    @Override
    protected void onHandleIntent(Intent intent) {
        new Notif().start();}
    private class Notif extends Thread{
        @Override
        public void run() {
            try {
                while (true){
                    Thread.sleep(3000);
                    String jsonStr = new String();
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if(UserData.update_id==null){UserData.update_id= 0;}
                    jsonStr = jsonParser.makeHttpRequest(Url.updatesUrl(UserData.update_id), "GET", params);
                    try {
                        JSONObject json = new JSONObject(jsonStr);
                        JSONArray data = json.getJSONArray("otg");
                        Log.d("cek", UserData.cek + "");
                        for(int i=0;i<data.length();i++) {
                            JSONObject otg = data.getJSONObject(i);
                            String ID   = otg.getString("id");
                            String desc = otg.getString("Desc");
                            String type = otg.getString("Category");
                            UserData.update_id = Integer.parseInt(ID);
                            if (UserData.cek!=null){
                                fireNotif(type+"-"+desc);

                            }else{}}
                        UserData.cek = UserData.update_id;

                    } catch (Exception e) {
                        e.printStackTrace();
                    }}
            } catch (InterruptedException e) {e.printStackTrace();
            }}}
}

AndroidManifest         

1 个答案:

答案 0 :(得分:1)

好的,您刚刚在AndroidManifest.xml中声明了您的服务,这没关系,但您也需要启动此服务。

在onCreate()方法的Activity中,您可以启动此服务:

div { width: 200px; height:50px; margin: 20px; position:relative; } div:before { content: ""; display:block; background: red; position:absolute; width:100%; height:100%; z-index:-1; -webkit-transform: skew(-20deg); -moz-transform: skew(-20deg); -o-transform: skew(-20deg); transform: skew(-20deg); }

2'问题是 - IntentService现场很短 - 即startService(new Intent(this, Notif.class));工作直到IntentService方法完成。 在您的情况下,您的服务只能工作几毫秒,因为您创建了新的Thread并且handleMethod已完成。

我的主张是:不要创建新的线程。 IntentService为您创建新线程,您不需要创建新线程。将所有逻辑放在handleIntent()方法