-1

こんにちは私は実行時にサンプルアプリを作成しようとしています。ホーム画面に戻り、バックグラウンドプロセスを実行し、トーストポイントを表示します。

必要な作業を行うには、バックグラウンドプロセスに別のスレッドが必要になると思います。これが私のメインアクティビティ(BackGroundPrcessingExampleActivity)のコードです:

enter code here
public class BackGroundProcessExampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {

            Intent myIntent = new Intent(this, MyService.class);
            startService(myIntent);

            moveTaskToBack(false);

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

「MyService.java」のコードは次のとおりです。

enter code here
public int onStartCommand(Intent intent, int flags, int startId) {

    Toast.makeText(getBaseContext(), "Service is started!", 1).show();

    myHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {

            super.handleMessage(msg);


                Toast.makeText(getBaseContext(), "Hello!",
                        Toast.LENGTH_SHORT).show();
        }
    };



    Runnable runnable = new Runnable() {
        @Override
        public void run() {



            while (true) {

                try {               

                    Thread.sleep(2);

                    myHandler.sendEmptyMessage(0);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    new Thread(runnable).start();

    return super.onStartCommand(intent, flags, startId);
}

私が抱えている問題は、トーストメッセージが表示されないことです。ブレークポイントを設定して、コードをステップ実行しているのにメッセージが表示されないことを確認できます。文脈が正しくないのではないかと思いますか?UIのContext(BackGroundPRcessExampleActivity)が必要ですか?よろしくお願いします。

D

4

2 に答える 2

0

それを試してみてください -

public int onStartCommand(Intent intent, int flags, int startId) {
Handler mHandler = new Handler();
Toast.makeText(getApplicationContext(), "Service is started!", 1).show();

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try { 
                Thread.sleep(5000);

                mHandler.post(new Runnable() {
              @Override
               public void run() {
                        Toast.makeText(getApplicationContext(), "Hello!", Toast.LENGTH_LONG).show();
                  }
               });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};
new Thread(runnable).start();

return super.onStartCommand(intent, flags, startId);

}

于 2012-04-12T16:15:05.520 に答える
0

返信の助けを借りて、これは最終的に私のために働いたものです。通知コードが追加されています。

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

    final NotificationManager notificationManager = (NotificationManager) 
            getSystemService(NOTIFICATION_SERVICE);

    // Create Notifcation
    final Notification notification = new Notification(R.drawable.ic_launcher,
        "A new notification", System.currentTimeMillis());

    // Cancel the notification after its selected
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    //
    notification.number += 1;

    // Specify the called Activity
    Intent intent2 = new Intent(this, NotificationReceiver.class);

    Toast.makeText(getApplicationContext(), "Service is started!", 1)
            .show();

    PendingIntent activity = PendingIntent.getActivity(this, 0, intent2, 0);
    notification.setLatestEventInfo(this, "This is the title",
        "This is the text", activity);


    myHandler = new Handler();

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int i = 0;

            while (true) {
                final int x = i++;

                try {
                    Thread.sleep(500);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }

                myHandler.post(new Runnable() {

                    @Override
                    public void run() {

                        try {
                            Toast.makeText(getApplicationContext(),
                                    "Hello!" + String.valueOf(x),
                                    3).show();

                            if(x == 100)
                                notificationManager.notify(0, notification);
                            Thread.sleep(1);

                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        }
    };
    new Thread(runnable).start();

みなさん、ありがとうございました。

D

于 2012-04-13T11:41:38.993 に答える