【问题标题】:how to send message from one thread to fargment thread using handler如何使用处理程序将消息从一个线程发送到fargment线程
【发布时间】:2020-05-24 14:52:03
【问题描述】:

我想使用处理程序将一些消息从一个线程发送到另一个线程。但实际上不知道如何实现它。在下面的代码中,我想将消息从广播接收器类发送到片段。但我不知道如何实现这个。

片段分节代码:

Calendar calendar= Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,16);
calendar.set(Calendar.MINUTE,42);
calendar.set(Calendar.SECOND,0);
Intent intent =new Intent(getContext(),NotificationActivity.class);
intent.putExtra("id",R.id.notification_imageView);
PendingIntent pendingIntent =  
PendingIntent.getBroadcast(getContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager=(AlarmManager) getActivity().getSystemService(ALARM_SERVICE);
System.out.println("DEBUG==> Instantiating Alarm Manager Service");
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),1000 * 60 * 
02,pendingIntent);

BroadcastReceiever 类 --ClassNotificationActivity.class

   public class NotificationActivity extends BroadcastReceiver {
   private View view;
   @Override
   public void onReceive(Context context, Intent intent) {
   ImageView img;
   System.out.println("DEBUG==> Page Notification Activity is being loaded");
   View view = View.inflate(context, R.layout.Samplelayout, null);
   img = view.findViewById(R.id.imageview);
   System.out.println("DEBUG==> Loading bulb Image for Animation"+img);
   System.out.println("DEBUG==> Loading bulb Image for Animation");
   Animation animation = new AlphaAnimation((float) 0.5, 0); // Change alpha from fully visible to 
   invisible
   animation.setDuration(500); // duration - half a second--2 minutes
   animation.setRepeatCount(200);
   img.startAnimation(animation);
    }
      }

Manifest.xml

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.SET_ALARM" />

  <receiver  android:name=".view.ui.NotificationActivity" />

Samplelayout.xml:

   <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/red"
            android:gravity="center_horizontal"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="70dp"
                android:layout_height="64dp"
                android:layout_margin="20dp"
                android:src="@drawable/Dumble"
                android:tint="@android:color/white"
                tools:layout_editor_absoluteX="32dp"
                tools:layout_editor_absoluteY="32dp" />


        </LinearLayout>

【问题讨论】:

    标签: android broadcastreceiver android-handler


    【解决方案1】:

    onResume() 中注册您的广播接收器。

    override fun onResume() {
            super.onResume()
            registerReceiver(this, IntentFilter("com.my.app.test_br"))
        }
    

    onPause() 确保注销接收者

    override fun onPause() {
            super.onPause()
            unregisterReceiver(this)
        }
    

    请务必注意我用于 IntenFilter 的值。这将是其他类如何指定它们发送到哪些广播接收器的方式。

    从发送广播的类中,初始化你的广播 Intent(注意用于 Intent 参数的值与注册广播接收器时使用的值相同)

        private val timerIntent = Intent(com.my.app.test_br)
    

    然后发送广播

    sendBroadcast(timerIntent)
    
    

    【讨论】:

    • 感谢 jacqueterrell 的解决方案。我们可以使用处理程序实现吗?
    猜你喜欢
    • 2015-08-29
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2012-06-21
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多