2

奇妙な問題があります。ListView を持つアクティビティがあり、onCreate のアクティビティでサービスを開始します。

今すぐアプリを起動すると、サービスが作業を完了するまで、アクティビティのレイアウトは表示されません。=( 通常、サービスはバックグラウンドで作業を行う必要があります。

アクティビティ

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class DealAlertMainActivity extends Activity {

    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list = (ListView) findViewById(R.id.list);

        //start service if its not running
        if(isMyServiceRunning() == false)
            startService(new Intent(DealAlertMainActivity.this, DealAlert_Service.class));
    }

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

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("keyword", "Test Keyword");
        map.put("title", "Test Title");
        mylist.add(map);
        map = new HashMap<String, String>();
        map.put("keyword", "Test Keyword 2");
        map.put("title", "Test Title 2");
        mylist.add(map);

        SimpleAdapter feeds_list = new SimpleAdapter(this, mylist, R.layout.listview_item,
                    new String[] {"keyword", "title"}, new int[] {R.id.Keyword, R.id.Title});
        list.setAdapter(feeds_list);

    }

...

}

サービス

import java.util.ArrayList;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;


public class DealAlert_Service extends Service {

    private NotificationManager mNM;

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

        mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    }





    public int onStartCommand(Intent intent, int flags, int startId) {

        //Do work

        }

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

    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}

ご協力ありがとうございました!

4

1 に答える 1

0

UI の観点からすると、サービスは自動的にバックグラウンドで実行されます。スレッド化の観点から、バックグラウンドで自動的に実行されるわけではありません。onStartCommand()がメイン アプリケーション スレッドで呼び出され、UI がフリーズしますonStartCommand()が、完了までに時間がかかります。したがって、サービスによって実行される重要な作業は、自分で作成したものであろうと、 に切り替えて取得したものであろうと、バックグラウンド スレッドで実行する必要がありますIntentService

于 2012-06-10T13:29:37.840 に答える