如何在另一个线程中创建Android通知?

时间:2015-09-08 12:46:53

标签: java android multithreading push-notification android-context

我想为我的Android应用创建通知。当我在一个类中使用我的其余代码运行它时,它运行正常,当我单击一个按钮并且通知正常工作时,所有内容都会执行。但是,因为还有很多工作要做,所以单击按钮时应用程序运行缓慢。为了解决这个问题,我将通知部分分成了一个自己的类,我在另一个线程上运行它。 我没有很多线程的经验,也没有关于这个问题的通知,我很感激这个问题的一些帮助。我应该将通知部分分成一类吗?

HomeActivity类是在单击按钮时使用start()方法调用线程的地方:

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import Model.Data;

public class HomeActivity extends FragmentActivity {

private com.atmlocator.hooper.kenneth.atmlocator.Notification n;

public void addListenerOnButton() {

        locationSpinner = (Spinner) findViewById(R.id.spinner1);
        options1Spinner = (Spinner) findViewById(R.id.spinner2);
        options2Spinner = (Spinner) findViewById(R.id.spinner3);
        Button locate = (Button) findViewById(R.id.locateBtn);

        locate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            Context context = getApplicationContext();
            String text = "Loading...";

            //call notification thread here
            n.start();

            //rest of code here...
            }
        }
    }
}

然后Notification类是:

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;

public class Notification extends FragmentActivity implements Runnable {

    private Thread t;
    private String name;
    Context context;

    Notification(String name, Context c)
    {
        this.name = name;
        this.context = c;
    }

    public void run()
    {
        // Intent is triggered if the notification is selected
        Intent intent = new Intent(context, HomeActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0);

        // Build notification
        android.app.Notification not = new android.app.Notification.Builder(context)
            .setContentTitle("Notification")
            .setContentText("New email").setSmallIcon(R.drawable.atm)
            .setContentIntent(pIntent).build();
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        not.flags |= android.app.Notification.FLAG_AUTO_CANCEL;

        notificationManager.notify(0, not);
    }

    public void start()
    {
        t = new Thread (this, name);
        t.start ();
    }
}

1 个答案:

答案 0 :(得分:0)

这几乎总能奏效:

public static void toast(final String text, final int length, final Context context) {
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(context, text, length).show();
        }
    });
}