【问题标题】:How can I run background activity?如何运行后台活动?
【发布时间】:2018-07-20 16:34:21
【问题描述】:

我有一个简单的聊天应用程序,我想让 ChatActivity 在背板上运行,并在从数据库中检索数据时收到通知。但我不明白后台是如何运作的。

在最后的 CustomAdapter adapter=new CustomAdapter(this,mesajList,firebaseUser);..... 部分中,接收到消息并显示在屏幕上。我希望它在后台工作

public class SohbetActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
private static String PREFS = "PREFS";
private static int SPLASH_TIME_OUT = 400;
TextView tvBaslik;
EditText et_mesaj;
FloatingActionButton buttonGonder;
ListView lv_chatyap;
FirebaseDatabase database;
FloatingActionButton imageButton;

private AdView mAdView2;

DatabaseReference dbRef;

FirebaseStorage firebaseStorage;
StorageReference storageReference;

public static final int RC_SELECT_IMAGE=1;
final FirebaseUser firebaseUser= FirebaseAuth.getInstance().getCurrentUser();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sohbet);
tvBaslik= (TextView) findViewById(R.id.textViewBaslik);
et_mesaj= (EditText) findViewById(R.id.editTextMesaj);
    buttonGonder= (FloatingActionButton) findViewById(R.id.buttonMesajGonder);
    lv_chatyap= (ListView) findViewById(R.id.listViewChatYap);
    lv_chatyap.setDivider(null);
lv_chatyap.setDivider(null);
    et_mesaj.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.toString().trim().length()>0){
                buttonGonder.setEnabled(true);}
            else{
                buttonGonder.setEnabled(false);}
        }

        @Override
        public void afterTextChanged(Editable s) {}
    });

    String oda= getIntent().getStringExtra("odaKey");
    tvBaslik.setText(oda);

    final ArrayList<Mesaj> mesajList=new ArrayList<Mesaj>();

    database=FirebaseDatabase.getInstance();
    dbRef=database.getReference("chats/"+oda);

    firebaseStorage=FirebaseStorage.getInstance();
    storageReference=firebaseStorage.getReference("chatImages/"+oda);

    buttonGonder.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.N)
        @Override
        public void onClick(View v) {
            String gonderen=firebaseUser.getEmail();
            String mesaj=et_mesaj.getText().toString();

            String zaman = new SimpleDateFormat("dd/MM HH:mm").format(Calendar.getInstance().getTime());

            dbRef.push().setValue(new Mesaj(gonderen,mesaj,zaman,null));
            et_mesaj.setText("");

        }
    });

    final CustomAdapter adapter=new CustomAdapter(this,mesajList,firebaseUser);
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            mesajList.clear();
            for(DataSnapshot ds:dataSnapshot.getChildren()){
                mesajList.add(ds.getValue(Mesaj.class));

            }
            lv_chatyap.setAdapter(adapter);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

`

【问题讨论】:

  • 你需要实现一个后台服务来监听变化。查看“广播”。
  • 我添加了背板似乎在设备上工作,但是当它在背板中时我无法获取数据。我想创建一个在背板上运行的消息服务。我创建了一个后端服务作为一个简单的守护进程,当我进入这个类时,我将 toast 发送到屏幕

标签: android service background background-service


【解决方案1】:

您需要调查一些事情。

  1. 作业调度器
  2. 广播
  3. 广播接收器

这是流程。

  • 将当前数据库中的对象数量存储在 Shared Pref 中。
  • 创建一个 JobScheduler 以查看数据库是否根据 Shared Pref 中的当前大小发生变化。
  • 如果发生更改,请向您的应用程序发送广播。
  • BroadcastReceiver 将接收该广播,然后向用户推送通知。

【讨论】:

  • 谢谢,找了两天。但我想问你一件事。不创建 JobScheduler 就不能发送通知吗?我读了一些关于实时通知的东西。当 Firebase 数据库中的数据发生变化时,我不能发送自动实时通知吗?有我可以调查的来源吗?
  • 如果您使用 OneSignal 等第三方通知。您可以在那里安排通知。但是,同样,就数据库中的数据更改而言,您对此没有太多控制权。你需要某种代码来跟踪那里有什么,去运行新代码,如果不同的数字发出广播。这将是您最简单、最好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多